2010-02-09 7 views
8

est ici une ligne de code dans ma classe de contrôleur:poster une action pour url.action?

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

est-il un moyen de faire utiliser la version verb=post de MyAction?

Répondre

12

Vous ne pouvez pas utiliser POST simplement en naviguant vers une URL différente. (C'est ce que vous feriez en changeant location.href.)

L'utilisation de POST n'a de sens que pour l'envoi de certaines données. Ce n'est pas clair à partir de votre code quelles données seraient effectivement POSTed.

Si vous voulez vraiment lancer un POST via javascript, essayez de l'utiliser pour envoyer un formulaire.

+0

a obtenu. merci, tige. – Rod

2

continue au large de la réponse de Matt Lacey, votre action pourrait revenir un peu de Javascript qui fait cela:

  1. Utilisez jquery pour ajouter une nouvelle forme au DOM
  2. Utilisez jquery pour soumettre le formulaire nouvellement ajouté

Quelque chose comme ceci: (code non testé)

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

Je suis venu Acros S le même problème moi-même et résolu en utilisant un attribut data- et certains jQuery. L'avantage de le faire de cette façon est que vous obtenez toujours l'URL correcte lorsque vous passez la souris sur le lien, même s'il effectue un POST. Notez que le Html.BeginForm contient l'action par défaut dans le cas où l'utilisateur appuie sur la touche Entrée.

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

J'adore ça. Merci! – panhandel

Questions connexes