2016-05-03 9 views
1

Ich habe eine Ansicht, Index, die zwei Formen hat, ein Suchformular und ein Formular speichern. Sie haben beide DropDownList-Steuerelemente, die an dieselbe Anwendungsdatenquelle gebunden sind, aber das ist das einzige, was sie gemeinsam haben.MVC - DropDownList-Wert nach POST-Befehl auf anderes Formular geändert

Wenn ich die Daten mit einer POST-Anfrage speichern, ändert sich die DDL im Suchformular so, dass sie denselben Wert erhält wie der im Sicherungsformular, was keine gewünschte Aktion ist. Hier ist meine abgespeckte Code:

@model Models.InfoVM 

@using (Html.BeginForm("Search", "MyController")) { 
    @Html.DropDownList("searchCodes", (IEnumerable<SelectListItem>)Application["Codes"], "--Select--") 
} 

@using (Html.BeginForm("Save", "MyController")) { 
    @Html.DropDownListFor(m => m.Code, (IEnumerable<SelectListItem>)Application["Codes"], Model != null ? Model.Code : "--Select--") 
} 

Und mein Controller-Aktion:

[HttpPost] 
public ActionResult Save([System.Web.Http.FromBody]InfoVM model) { 
    if (ModelState.IsValid) { 
     Repository.UpdateInfo(model); 
    } 
    return View("Index", model); 
} 

, warum dies geschieht und wie kann ich diese Verbindung zwischen den beiden brechen? Da ich die DDL des Suchformulars nicht an das Modell gebunden habe, das ich an die Seite gebunden habe, habe ich nicht erwartet, dass sich der Wert ändert.

Antwort

0

Dies ist das erwartete Verhalten. Wenn sich der Wert des Modells ändert, wird es für alle Elemente auf der Seite geändert.

Sie sollten verschiedene Modelleigenschaften für das Dropdown in zwei Formen haben. Sie können die Elemente in eine andere Variable kopieren (und nicht nur auf sie verweisen). Z.B. Versuchen Sie, CodesForSearch und CodesForSave zu erstellen. Füllen Sie diese beiden SelectLists mit derselben Quelle aus. Binden Sie die Dropdowns mit ihrer eigenen separaten Variablen.

+0

Danke - mir war nicht bewusst, dass das das erwartete Verhalten war. – ScottSto

Verwandte Themen