Ajax.BeginForm UpdateTargetId不适用于DropDownList

时间:2009-10-21 18:51:45

标签: asp.net-mvc drop-down-menu ajax.beginform

代码:

<% using (Ajax.BeginForm("GetResourcesByProject", "CreateRequest", new AjaxOptions { UpdateTargetId = "ResourceListDiv"}))
{
 Response.Write(Html.DropDownList("SelectProject", Model.ProjectList, "Select Project", new { onchange = "this.form.submit();" }));
} %>

当我运行页面时,我得到正确的控制器操作,以使用表单集合中的正确数据进行触发:

public ActionResult GetResourcesByProject(FormCollection formCollection)
{
    var resourceModels = (from project in POTSModel.ProjectList
                          where project.Id == Convert.ToInt32(formCollection["SelectProject"])
                          select project).First().Resources;

    return PartialView("ResourceList", resourceModels);
 }

从这样的Ajax.ActionLink中可以正常工作:

<%= Ajax.ActionLink("Select", "GetResourcesByProject", "CreateRequest", new { projectId = item.Id }, new AjaxOptions { UpdateTargetId = "ResourceListDiv" })%>

当帖子发生时,我会导航到新页面,而不是停留在现有页面上并更新div的内容。

感谢。

3 个答案:

答案 0 :(得分:5)

submit()可能不会触发Ajax.BeginForm,因此它会像往常一样处理。请参阅此示例:Additional jQuery events submitting my Ajax.BeginForm。 或者添加提交按钮(可能隐藏)并调用其.click()。

答案 1 :(得分:1)

using(Ajax.BeginForm(...))包含Html.RenderPartial时不起作用。

答案 2 :(得分:0)

它是否适用于Internet Explorer 7.我在级联DropDownList时遇到了IE7的问题。 Ajax.BeginForm不检索表单(Request.Form [“myIdForm”]为空)IE7中的值,在其他所有Web浏览器中都可以使用(包括IE8)!

            <% using (Ajax.BeginForm("profileChanged", "profiles", new AjaxOptions() { UpdateTargetId = "customer", OnComplete = "SetHiddenProfile" }, new { @class = "filtersForm" }))
          {   %>                           
        <p id="customer"> 
            <% Html.RenderPartial("FilterContracts"); %>
        </p>
        <%} %>

我调用数据库在profileChanged操作中填充dropDown并返回局部视图(“FilterContracts”)。