2012-10-17 37 views
0

我需要ASP MVC的帮助。 我:如何通过ActionLink提交表单

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

,我需要通过ActionLink的提交表单,因为我需要从下拉列表获得了selectedValue,我不知道任何方式如何做到这一点其他然后从的FormCollection或参数法属性POST。

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

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

我试过用jquery和Ajax.ActionLink但是所有的东西都叫做Index的GET方法。 (new { onclick = "$(this).parents('form').first().submit();" - 没有为我工作 - 它也称为GET方法)

回答

1

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

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

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

0

默认情况下,actionlink默认为GET。您无法将其变为开箱即用的POST。

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

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

而且我劝你还是属性法[HttpPost],更具可读性然后[AcceptVerbs(HttpVerbs.Post)]

柜面你想使用ActionLink的,你将不得不开始在你的JavaScript技能的工作,最终提交formvalues。

提示:如果您在POST方法的第一行设置了一个中断点,并且您在this上执行了手表,则可以通过查看几个基类来获取正在提交的值,然后找到ValueProviders

+0

非常感谢您! 我在beginForm中犯了一个错误,现在它在jquery提交时工作正常,并且必须返回false,Jason如何说。 – Prazi

1

试试这个:

HTML/C#:

JS:

$(function() { 

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

});