在我的ASP.net MVC视图中,我有一个下拉列表,我想获取有关选择的详细信息并异步更新div。我的aspx如下:
<% using (Html.BeginForm("Index", "Portal", FormMethod.Post, new { id = "TheForm" }))
{%>
<h2>Index</h2>
<% using (Ajax.BeginForm("Details", new AjaxOptions { UpdateTargetId = "mpkResults" }))
{ %>
<%=Html.DropDownList("Docs", (IEnumerable<SelectListItem>)ViewData["Docs"],
new { onchange = "document.getElementById('TheForm').submit();" })%>
<p><input type="submit" value="Details" /></p>
<% } %>
<div id="mpkResults" style="margin:10px 0px 0px 0px;"></div> ...
onchange事件在选择下拉列表时正确触发,但是在我的代码中触发后面的Details方法,它会命中我的Index方法。为什么详细信息方法没有被onchange事件击中?控制器中的My Details()方法是:
public ActionResult Details()
{
... < It never gets here, just goes to the index() method
}
现在有点令人沮丧,因为我确定这是一个简单的错误,但不确定它可能是什么。我查看了我的页面的来源,果然,表单看起来应该路由到详细信息操作:
<form action="/Portal/Details" method="post" ...
任何帮助都将不胜感激。
答案 0 :(得分:2)
这是因为在您的onchange
处理程序中,您在submit()
表单上调用TheForm
方法而不是您的AJAX表单:
new { onchange = "document.getElementById('TheForm').submit();" })%>
^^ wrong form ID
为您的AJAX表单添加另一个ID,然后使用它。