2010-02-09 7 views

Odpowiedz

12

Nie można używać testu POST, przechodząc do innego adresu URL. (Co możesz zrobić, zmieniając location.href.)

Używanie testu POST ma sens tylko przy przesyłaniu niektórych danych. Z twojego kodu nie wynika, które dane rzeczywiście byłyby POSTED.

Jeśli naprawdę chcesz zainicjować test POST za pośrednictwem javascript, spróbuj użyć go do przesłania formularza.

+0

dostał. dzięki, pręcie. – Rod

2

Kontynuując off odpowiedzi Matt Lacey, twoje działanie może wrócić trochę JavaScript, który wykonuje to:

  1. użyć jQuery aby dodać nową formę do DOM
  2. użyć jQuery do złożenia nowo dodany formularz

coś takiego: (kod nietestowanego)

var urlHelper = new UrlHelper(...); 
var redirectUrl = urlHelper.Action("MyAction", "MyController"); 

var redirectScript = String.Format(@" 
    var formTag = $('<form action=""{0}"" method=""post"" id=""redirectForm""></form>'); 
    $(body).append(formTag); 
    formTag.submit();" 
    , redirectUrl 
); 

return JavaScript(redirectScript); 
17

doszedłem acros s sam ten problem i rozwiązany za pomocą atrybutu data- i niektórych jQuery. Zaletą robienia tego w ten sposób jest to, że wciąż masz poprawny adres URL, gdy umieścisz kursor nad linkiem, mimo że robi on POST. Zauważ, że Html.BeginForm zawiera domyślną akcję w przypadku, gdy użytkownik uderzy w klawisz Enter.

HTML (ASP.NET MVC3 Razor)

@using (Html.BeginForm("Quick", "Search")) 
{ 
    <input type="text" name="SearchText" /> 
    <a href="@Url.Action("Quick", "Search")" data-form-method="post">Search</a> 
    <a href="@Url.Action("Advanced", "Search")" data-form-method="post">Advanced</a> 
} 

jQuery

$("a[data-form-method='post']").click(function (event) { 
    event.preventDefault(); 
    var element = $(this); 
    var action = element.attr("href"); 
    element.closest("form").each(function() { 
     var form = $(this); 
     form.attr("action", action); 
     form.submit(); 
    }); 
}); 
+1

Uwielbiam to. Dzięki! – panhandel

Powiązane problemy