对于Submit按钮与this.form.submit,AJAX的行为方式不同?

时间:2009-07-16 13:59:14

标签: asp.net-mvc asp.net-ajax

我正在尝试在下拉列表中自动保存选择(ASP.NET,MVC,VB),但它没有按预期运行。这是控制器中的虚拟动作:

<AcceptVerbs(HttpVerbs.Post)> _
Function TestAction(ByVal id As Integer) As ActionResult
    Return Content(id)
End Function

和HTML:

<script type="text/javascript" src='<%= Url.Content("~/Scripts/MicrosoftAjax.debug.js") %>'></script>
<script type="text/javascript" src='<%= Url.Content("~/Scripts/MicrosoftMvcAjax.debug.js") %>'></script>

<% Using Ajax.BeginForm("TestAction", New AjaxOptions With {.UpdateTargetId = "test"})%>
<%=Html.Hidden("id", 123)%>
<%=Html.DropDownList("actions", Nothing, New With {.onchange = "this.form.submit();"})%>
<input type="submit" value="Submit" />
<span id="test"></span>
<% End Using%>

“提交”按钮按预期工作 - 范围填充“123”。另一方面,下拉列表打开一个新页面,上面只有“123”。为什么“this.form.submit()”没有与Submit按钮做同样的事情?我是否应该进行不同的调用以模拟“提交”按钮?

2 个答案:

答案 0 :(得分:1)

this.form.submit不运行form.onsubmit事件。另一方面,按提交按钮可以。结合the HTML that Ajax.BeginForm generates,解释了为什么两者表现不同。至于如何使您的事件与按下提交按钮的操作相同,请查看链接文章中的HTML:

Sys.Mvc.AsyncForm.handleSubmit(
         this,
         new Sys.UI.DomEvent(event),
         { 
             insertionMode: Sys.Mvc.InsertionMode.replace,
             updateTargetId: 'test' 
         });

答案 1 :(得分:0)

我知道这是旧的,但有一种新的(更好的)方法可以做到这一点。

使用jQuery而不是使用javascript。刚刚遇到这个问题并且效果很好。

this.form.submit()&lt; ---- Javascript

$("form").submit()&lt; ---- jQuery