使用JQuery在Ajax.BeginForm上发布帖子

使用JQuery在Ajax.BeginForm上发布帖子,jquery,asp.net-mvc-2,ajax.beginform,Jquery,Asp.net Mvc 2,Ajax.beginform,我有一个带有2个下拉列表的MVC表单,其中第一个下拉列表上的选择应该通过AJAX调用更新第二个下拉列表 表格如下: <%using (Ajax.BeginForm("GetChildren", "Home", null, new AjaxOptions { UpdateTargetId = "result" }, new Dictionary<string, object> { { "id", "someForm" } })) { %> <%= Html.DropD

我有一个带有2个下拉列表的MVC表单,其中第一个下拉列表上的选择应该通过AJAX调用更新第二个下拉列表

表格如下:

<%using (Ajax.BeginForm("GetChildren", "Home", null, new AjaxOptions { UpdateTargetId = "result" }, new Dictionary<string, object> { { "id", "someForm" } }))
{ %>
<%= Html.DropDownList("masterSelection", new SelectList((IList<Master>)ViewData["Master"], "MasterName", "MasterName"))%>
<span id="result">
    <%Html.RenderPartial("ChildSelection");%>
</span>
<% } %>
这将转换为以下客户端HTML

<form action="/Home/GetChildren" id="someForm" method="post" onclick="Sys.Mvc.AsyncForm.handleClick(this, new Sys.UI.DomEvent(event));" onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, updateTargetId: &#39;result&#39; });">

如果我做对了,onsubmit应该负责AJAX调用,并防止表单的正常行为(完全刷新)

现在在Firefox中一切正常,但在IE中,默认行为似乎没有被取消,导致AJAX调用(由表单的onsubmit代码引起)并再次刷新页面

<%= Html.DropDownList("masterSelection", new SelectList((IList<Master>)ViewData["Master"], "MasterName", "MasterName"))%>
<span id="result">
    <%Html.RenderPartial("ChildSelection");%>
</span>
显然不是我想要的

当我调试onsubmit javascript代码时,它归结为MicrosoftAjax.js文件中的一个方法,该方法应该取消表单的默认post行为

function Sys$UI$DomEvent$preventDefault() {
    /// <summary locid="M:J#Sys.UI.DomEvent.preventDefault" />
    if (arguments.length !== 0) throw Error.parameterCount();
    if (this.rawEvent.preventDefault) {
        this.rawEvent.preventDefault();
    }
    else if (window.event) {
        this.rawEvent.returnValue = false;
    }
}
函数Sys$UI$DomEvent$preventDefault(){
/// 
if(arguments.length!==0)抛出错误.parameterCount();
if(this.rawEvent.preventDefault){
this.rawEvent.preventDefault();
}
else if(window.event){
this.rawEvent.returnValue=false;
}
}
在使用IE进行调试时,我得到一行this.rawEvent.returnValue=false;这对于取消IE中的事件应该是正确的,但显然这对我不起作用

我已经制定了一个替代解决方案,使用jQuery启动AJAX调用并构建新的dropdownlist客户端,或者在表单中添加一个不可见的按钮,在第一个下拉列表的更改事件中调用它的click事件,但我仍然希望使用第一个(最干净的imo)

有什么建议吗


美国

这个问题解决了吗?你能在window.Event中设置一个
alert()
,看看IE是否真的在调用它吗?此外,您只需尝试
returnfalse()而不是
this.rawEvent.returnValue=false

我做了更多的搜索,并得出了以下结论,这比调用
$(“#someForm”).submit()更简单但我仍然更喜欢在AJAX调用或单击隐藏按钮后构建dropdownlist客户端

我已经从页面中删除了Ajax.BeginForm

<%= Html.DropDownList("masterSelection", new SelectList((IList<Master>)ViewData["Master"], "MasterName", "MasterName"))%>
<span id="result">
    <%Html.RenderPartial("ChildSelection");%>
</span>
由于以下帖子,我找到了这种方法:

这对IE和FF对我都有效


我仍然想知道为什么我的第一个代码在IE中不起作用。

更改了this.rawEvent.returnValue=false;返回false();没有成功。事实上,我在window.event上进行了检查;调试时,该值不为空。
    $(function () {
        $("#masterSelection").change(function () {
            $('#result').load("Home/GetChildren", { masterSelection: this.value });
        });
    });