2010-02-09 7 views
8

Dies ist eine Zeile Code in meiner Controller-Klasse:Beitrag Aktion für URL.Action?

return JavaScript(String.Format("window.top.location.href='{0}';", Url.Action("MyAction", "MyController"))) 

Gibt es eine Möglichkeit die verb=post Version von MyAction verwenden zu machen?

Antwort

12

Sie können POST nicht verwenden, indem Sie einfach zu einer anderen URL navigieren. (Was Sie tun würden, indem Sie location.href ändern.)

Die Verwendung von POST ist nur sinnvoll, wenn Sie Daten einreichen. Aus Ihrem Code geht nicht hervor, welche Daten tatsächlich gesendet werden.

Wenn Sie wirklich einen POST über Javascript initiieren möchten, versuchen Sie es, um ein Formular zu senden.

+0

bekam sie. Danke, Stange. – Rod

2

Weiter weg von Matt Lacey Antwort, Ihre Aktion könnte ein wenig Javascript zurückgeben, das dies tut:

  1. Verwendung jquery eine neue Form der DOM
  2. Verwendung jquery hinzufügen, um die neu hinzugefügte Formular abschicken

Etwas wie folgt aus: (ungetestet Code)

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

ich kam acros s das gleiche Problem selbst und löste es mit einem data- Attribut und einige jQuery. Der Vorteil dieser Vorgehensweise besteht darin, dass Sie immer noch die richtige URL erhalten, wenn Sie den Mauszeiger über den Link halten, obwohl er einen POST ausführt. Beachten Sie, dass die Html.BeginForm die Standardaktion enthält, falls der Benutzer die Eingabetaste drückt.

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

Liebe es. Vielen Dank! – panhandel

Verwandte Themen