我试图通过表单中的下拉列表更改来更改视图中PartialView中的数据。现在,如果我点击了提交按钮,我的表单就没有问题,并且formcollection可用,但是当我尝试通过jquery在change事件上提交表单时,表单可以提交但没有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" }))
       {%>

最佳答案

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

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


查看是问题是表格序列化还是实际发布。

偏执的是,当您查看HTML源代码时,您的表单的ID为“ myForm”,而不仅仅是该名称的名称?

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

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


我没有意识到您已经在使用.net的ajax表单。应该能够触发表单的正常提交并使其正常运行。

10-04 22:03
查看更多