Heim >Backend-Entwicklung >C++ >Warum zeigt mein Textfeld nach einer Umleitung in MVC 'latitude2' anstelle von 'latitude' an?

Warum zeigt mein Textfeld nach einer Umleitung in MVC 'latitude2' anstelle von 'latitude' an?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-02-01 08:21:10267Durchsuche

Why Does My TextBoxFor Display

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

-Warge Vorrang.

Lösungen:

Zwei Ansätze adressieren dies effektiv:
  1. modelState: ModelState Löschen Sie die Index, bevor Sie den neuen Wert in der Aktion
  2. zuweisen:
<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>
  1. Modellbindung vermeiden: DataSites initialisieren Index
Auswahl zwischen diesen Lösungen hängt davon ab, ob Sie für andere Zwecke innerhalb der
<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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn