JQuery Form Post没有将FormCollection发送到MVC Controller

时间:2010-01-12 17:41:02

标签: jquery asp.net-mvc

我正在尝试通过表单中的下拉列表更改在我的视图中更改PartialView中的数据。现在,如果我点击提交按钮,我的表单没有问题,并且formcollection可用,但是当我尝试通过jquery提交更改事件时,表单提交正常但没有formcollection

有什么想法吗?

这是提交代码

$(function() {
            $('#ddlSelection').change(function() {
                var form = $("#myForm");
                var action = form.attr("action");
                var serializedForm = form.serialize();
                $.post(action, serializedForm, function() { alert("Finished!") });
            });
        });

表格就是这样

    <% using (Ajax.BeginForm("myForm", new AjaxOptions
            {
                UpdateTargetId = "divItemsList",
                OnComplete = "ClearForm"
            }))
       {%>


        <%=Html.Label("ddlFilter", "Parent Filter")%>
        <%=Html.DropDownList("ddlFilter", "Please Select ...")%><br />



        <fieldset>
            <legend>Filter Option Details</legend>
            <p>
                <label for="Value">Value:</label>
                <%= Html.TextBox("Value") %>
                <%= Html.ValidationMessage("Value", "*") %>
            </p>
        </fieldset>
<%}%>

好吧,本来应该多关注,Ajax.Beginform标签没有给表单一个id或名称,我认为他们认为它是不成功的,所以解决方案是手动添加htmlattributes。如此..

<% using (Ajax.BeginForm("TheAction", null, new AjaxOptions
            {
                UpdateTargetId = "divFilterItemsList",
                OnComplete = "ClearForm"
            }, new { ID = "myForm", Name = "myForm" }))
       {%>

2 个答案:

答案 0 :(得分:3)

jQuery documentation

  

为了正常工作,序列化要求表单字段具有name属性。只有一个ID将无法正常工作

我会检查以确保所有表单元素都具有name属性。

答案 1 :(得分:1)

如果您有嵌套表单之类的东西(应该避免),我已经看到form.serialize会起作用。你总是可以尝试:

var serializedForm = $("#myForm input, #myForm select, #myForm textarea").serialize();

查看表格序列化是问题还是实际帖子。

当你看到HTML源代码而不只是那个名字时,你的表单的ID是“myForm”吗?

发布ASP代码后编辑:为什么不将JS更改为:

$(function() {
    $('#ddlSelection').change(function() {
        $("#myForm").submit();
    });
});

我没有意识到你已经在使用.net的ajax表单了。应该只能触发表单的正常提交并使其正常工作。