2009-10-21 9 views
6

Code:Ajax.BeginForm UpdateTargetId nicht mit Dropdown arbeiten

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

Wenn ich die Seite laufen bekomme ich die Aktion richtig Controller mit den richtigen Daten in Form Sammlung auszulösen:

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); 
} 

Es funktioniert von einem Ajax.ActionLink wie diese fein:

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

Wenn die Post geschieht ich zu einer neuen Seite navigiert statt o f Bleiben Sie auf der bestehenden Seite und aktualisieren Sie den Inhalt der div.

Danke.

Antwort

5

submit() wahrscheinlich nicht Ajax.BeginForm auslösen, und so wird es wie gewohnt Post verarbeitet. Siehe zum Beispiel: Additional jQuery events submitting my Ajax.BeginForm. Alternativ fügen Sie die Schaltfläche "Senden" hinzu (möglicherweise ausgeblendet) und rufen Sie deren .click() auf.

+1

Die einreichen versteckte Taste funktioniert perfekt: \t \t \t <% mit (Ajax.BeginForm ("GetResourcesByProject", "erzeugeAnf", neue {Ajaxoptions UpdateTargetId = "ResourceListDiv"})) \t \t \t \t { \t \t \t \t \t Response.Write (Html.DropDownList ("SelectProject", Modell.ProjectList, "Select Project", neues {onchange = "document.getElementById ('projectSubmit'). Click();"})); \t \t \t \t \t%> \t \t \t \t \t \t \t \t \t \t <% \t \t \t \t}% > Ein bisschen hässlich und klumpig aber es funktioniert. Schade, dass die normale Form submit() nicht die Ajax-Form trifft. Danke für die Hilfe. – Tyler

0

Funktioniert es mit Internet Explorer 7. Ich habe ein Problem mit IE7 in DropDownList kaskadieren. Die Ajax.BeginForm ruft nicht Formular ab (Request.Form ["myIdForm"] ist leer) Wert in IE7, in allen anderen Webbrowser funktioniert es (einschließlich IE8)!

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

Ich nenne die Datenbank dropDown in profileChanged Aktion zu füllen und eine Teilansicht zurückkehren ("FilterContracts").

1

Die using(Ajax.BeginForm(...)) funktioniert nicht, wenn sie eine Html.RenderPartial enthält.

Verwandte Themen