ASP.NET MVC AJAX在简单调用时返回新页面

时间:2009-07-15 13:37:56

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

我不确定以下设置有什么问题。我有一个View列出了许多记录,每个记录都有一个与之关联的下拉列表来更改该记录的值。我在没有AJAX的情况下完成了所有操作,但您必须更改一堆下拉菜单,然后单击“提交”按钮。我想改变它,以便立即保存下拉选项。

我的精简视图(IEnumerable类型(Of MyTable)):

<script src="../../Scripts/MicrosoftAjax.debug.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcAjax.debug.js" type="text/javascript"></script>

<% For Each item In Model%>
<% Using Ajax.BeginForm("Update", New AjaxOptions With {.UpdateTargetId = "test"})%>
<%=Html.Hidden("id", item.id)%>
<%=item.name%>:
<%=Html.DropDownList("ActionCode", New SelectList(ViewData("actions"), "Value", "Text", item.ActionCode), New With {.onchange = "this.form.submit();"})%>
<span id="test"></span>
<br/>
<% End Using%>
<% Next%>

我的更新控制器:

<AcceptVerbs(HttpVerbs.Post)> _
Function Update(ByVal id As Integer, ByVal ActionCode As String) As ActionResult
    'Update would happen here
    Return Content(id & ": " & ActionCode)
End Function

我想要发生的是下拉更改以触发更新控制器,但可能不会返回任何内容 - 只需更新数据库并让用户继续。然而,正在发生的是显示空白页面,其上有内容值(即“123:ABC”)。它是正确的id / code组合,因此Update似乎正在正确触发,它只是选择消除html。

显然我在某种程度上没有正确地返回AJAX才能正常工作,但这种模式似乎与我能找到的例子相符,所以我不确定我哪里出错了。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

您是否可能嵌套表单标签?

我发现在这种情况下,单击提交按钮实际上会触发表单提交在外部表单中,而不是像您期望的那样内部表单:

<form id="outer">
  <form id="inner">
     <input type="submit" value="submit" />
  </form>
</form>

我还建议使用像Firefox的Firebug插件这样的工具。它可以帮助您查看ajax活动和响应。