2009-10-21 5 views
6

Код:Ajax.BeginForm UpdateTargetId не работает с DropDownList

<% 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" })%> 

Когда пост происходит, я переходите на новую страницу, а не о f оставаясь на существующей странице и обновляя содержимое div.

Спасибо.

ответ

5

submit(), вероятно, не запускает Ajax.BeginForm, и поэтому обрабатывается как обычный пост. См. Это, например: Additional jQuery events submitting my Ajax.BeginForm. Альтернативно добавьте кнопку отправки (возможно, скрытую) и вызовите ее .click().

+1

Скрытое кнопка отправки отлично работает: \t \t \t <% с помощью (Ajax.BeginForm ("GetResourcesByProject", "CreateRequest", новые AjaxOptions {UpdateTargetId = "ResourceListDiv"})) \t \t \t \t { \t \t \t \t \t Response.Write (Html.DropDownList («SelectProject», Model.ProjectList, «Выбрать проект», новый {onchange = "document.getElementById ('projectSubmit'). Click();"})); \t \t \t \t \t%> \t \t \t \t \t <входной тип = "отправить" имя = стиль "projectSubmit" = "видимость: скрытый" /> \t \t \t \t \t <% \t \t \t \t}% > Немного уродливый и неуклюжий, но он работает. Bummer, что нормальная form.submit() не попадает в форму ajax. Спасибо за помощь. – Tyler

0

Работает ли он с Internet Explorer 7. У меня есть проблема с IE7 в каскадировании DropDownList. Ajax.BeginForm не извлекает форму (Request.Form ["myIdForm"] пусто) Значение в IE7, во всех других браузерах это работает (включая IE8)!

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

Я называю базу данных для заполнения DropDown в действии profileChanged и возвращают частичный вид («FilterContracts»).

1

using(Ajax.BeginForm(...)) не работает, если он содержит Html.RenderPartial.