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
Freigeben: 2025-02-01 08:21:10
Original
265 Leute haben es durchsucht

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>
Nach dem Login kopieren

Ansicht:

<code class="language-csharp">@model miniproj2.Models.DataSites

<p>
    @Html.TextBoxFor(x => x.Latitude)
</p></code>
Nach dem Login kopieren

Modell:

<code class="language-csharp">public class DataSites
{
    public string Latitude { get; set; }
}</code>
Nach dem Login kopieren

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>
Nach dem Login kopieren
  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>
Nach dem Login kopieren
-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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage