我试图通过表单中的下拉列表更改来更改视图中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表单。应该能够触发表单的正常提交并使其正常运行。