0

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

<% 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 方法)

4

3 回答 3

1

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

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

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

于 2012-10-17T20:35:12.680 回答
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;
   });

});
于 2012-10-18T01:29:43.650 回答
0

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

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

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

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

如果您确实想使用 ActionLink,则必须开始学习您的 javascript 技能以最终提交表单值。

提示:如果你在你的 POST 方法的第一行设置了一个断点,并且你执行了一个监视,this你可以通过几个基类来获取提交的值,然后找到ValueProviders.

于 2012-10-17T13:17:24.347 回答