代码之家  ›  专栏  ›  技术社区  ›  Mark Kadlec

回发时的ASP.NET MVC路由

  •  0
  • Mark Kadlec  · 技术社区  · 16 年前

    在我的ASP.NET MVC视图中,我有一个下拉列表,我想获取有关选择的详细信息并异步更新一个分区。我的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方法没有在onchange事件上受到影响?我在控制器中的details()方法是:

        public ActionResult Details()
        {
            ...   < It never gets here, just goes to the index() method
        }
    

    现在有点令人沮丧,因为我确定这是一个简单的错误,但不确定它可能是什么。我查看了页面的来源,确信表单看起来应该路由到详细信息操作:

    <form action="/Portal/Details" method="post" ...
    

    任何帮助都将不胜感激。

    1 回复  |  直到 16 年前
        1
  •  2
  •   Fyodor Soikin    16 年前

    那是因为在你的 onchange 处理程序,您正在调用 submit() 方法在 TheForm 表单而不是Ajax表单:

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

    给Ajax表单另一个ID,并使用它。