Heim >Backend-Entwicklung >C++ >Warum zeigt mein Textfeld nach einer Umleitung in MVC 'latitude2' anstelle von 'latitude' an?
mVC textBoxFor: Anfangs der aktualisierten Werte
Dieses Beispiel zeigt ein gemeinsames Problem in ASP.NET -MVC -Anwendungen, wobei TextBoxFor
einen unerwarteten Anfangswert anstelle des aktualisierten Werts zeigt.
Lassen Sie uns ein MVC -Aktion und ein Szenario anzeigen:
Controller -Aktionen:
<code class="language-csharp">[HttpPost] public ActionResult SomeInformation() { var test1 = new DataSites { Latitude = "LATITUDE2" }; return RedirectToAction("Index", test1); } [HttpPost] public ActionResult Index(DataSites dataSiteList) { if (dataSiteList.Latitude != null) { var test = new DataSites { Latitude = "LATITUDE" }; return View(test); } return View(dataSiteList); }</code>
Ansicht:
<code class="language-csharp">@model miniproj2.Models.DataSites <p> @Html.TextBoxFor(x => x.Latitude) </p></code>
Modell:
<code class="language-csharp">public class DataSites { public string Latitude { get; set; } }</code>
Das Problem: Nach dem Navigieren nach /Home/SomeInformation
(Setzen Sie den Breitengrad auf "Latitude2") und die Umleitung von Index
, zeigt die Ansicht "Latitude2" anstelle des erwarteten "Breitengrads".
Erläuterung:
RedirectToAction
Das ModelState
mit einem Modell übergibt Daten als Routenwerte. Der Standardmodellbindemittel wird dann mit diesem Wert Index
("Latitude2") ausgefüllt. Obwohl die Aktion ModelState
versucht, einen neuen Wert ("Breitengrad") zuzuweisen, hat der vorhandene
Lösungen:
Zwei Ansätze adressieren dies effektiv:
ModelState
Löschen Sie die Index
, bevor Sie den neuen Wert in der Aktion <code class="language-csharp">[HttpPost] public ActionResult Index(DataSites dataSiteList) { ModelState.Clear(); // Add this line if (dataSiteList.Latitude != null) { var test = new DataSites { Latitude = "LATITUDE" }; return View(test); } return View(dataSiteList); }</code>
DataSites
initialisieren
Index
<code class="language-csharp">[HttpPost] public ActionResult Index(DataSites dataSiteList) { var test = new DataSites { Latitude = "LATITUDE" }; // No reliance on dataSiteList return View(test); }</code>-Kaktion auf Daten zugreifen müssen. Wenn nicht, ist die zweite Lösung (Vermeidung von Modellbindung) sauberer und effizienter. Andernfalls ist es notwendig,
zu klären. dataSiteList
Das obige ist der detaillierte Inhalt vonWarum zeigt mein Textfeld nach einer Umleitung in MVC 'latitude2' anstelle von 'latitude' an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!