回发上的ASP.net MVC路由

时间:2010-05-28 20:22:41

标签: asp.net-mvc

在我的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" ...

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

这是因为在您的onchange处理程序中,您在submit()表单上调用TheForm方法而不是您的AJAX表单:

    new { onchange = "document.getElementById('TheForm').submit();" })%>
                                               ^^ wrong form ID

为您的AJAX表单添加另一个ID,然后使用它。