如何通过ActionLink提交表单

时间:2012-10-17 13:02:41

标签: jquery asp.net-mvc post actionlink

我需要ASP MVC的帮助。 我有:

<% using (Html.BeginForm(null,null,FormMethod.Post)) {%>
    <p>
         <input type="submit" value="Choose" />
          .
          .
          .
          <%=Html.ActionLink("Save", "Index")%>
    </p>
<% } %>

我需要通过ActionLink提交表单,因为我需要从dropdownlist中获取selectedValue,我不知道如何从FormCollection或带有属性POST的方法中的参数那样做。否则

所以我需要在点击动作链接后调用此函数。

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Index(FormCollection formValues)
    {
    }

我尝试使用jquery和Ajax.ActionLink,但所有内容都称为Index的GET方法。 (new { onclick = "$(this).parents('form').first().submit();" - 对我来说不起作用 - 也称为GET方法)

3 个答案:

答案 0 :(得分:1)

您需要调用表单的提交,然后返回false。使用Javascript:

$(function() {
    $('find-your-link').click(function(e) {
        e.preventDefault();
        $(this).parents('form').first().submit();
    });
});

这应该提交表单而不会将您发送到GET URL。

答案 1 :(得分:1)

试试这个:

HTML / C#:

<% 
using (Html.BeginForm(null,null,FormMethod.Post, new { id = "myform" })) 
{%>
    <p>
         <input type="submit" value="Choose" />
         .
         .
         .
         <%=Html.ActionLink("Save", "Index", null, new { id="action-save" })%>
    </p>
<% } %>

JS:

$(function() {

   $('#action-save').bind('click', function(event) {
       $('#myform').submit();     
       return false;
   });

});

答案 2 :(得分:0)

默认情况下,actionlink将始终为GET。你不能把它变成一个开箱即用的POST。

关于您的设置,当您使用常规提交按钮时,下拉列表中的值应位于FormCollection

另一种方法是使方法参数与formvalues匹配。例如,如果你有一个名为“foo”的下拉列表,你可以有一个方法Index(string foo),如果它具有相同的名称,MVC会将dropdownlist-value映射到该参数。请记住,formvalues的类型应该能够被解析为参数的类型。在您的情况下,如果您的下拉列表的值类型是int, your method-parameter should be of type int`类型。 (您不能指望将表单数组值解析为字符串类型参数。)

此外,我建议您将方法归为[HttpPost],更可读,然后[AcceptVerbs(HttpVerbs.Post)]

如果你想使用ActionLink,你必须开始使用你的javascript技能,最终提交formvalues。

提示:如果在POST方法的第一行设置断点,并且在this上执行监视,则可以通过浏览几个基类来查看提交的值,然后查找{ {1}}。