Rumah > pembangunan bahagian belakang > C++ > Kenapa TextBox untuk memaparkan 'latitude2' dan bukannya 'latitud' selepas pengalihan di MVC?

Kenapa TextBox untuk memaparkan 'latitude2' dan bukannya 'latitud' selepas pengalihan di MVC?

Mary-Kate Olsen
Lepaskan: 2025-02-01 08:21:10
asal
265 orang telah melayarinya

Why Does My TextBoxFor Display

mvc textboxfor: Nilai awal vs dikemas kini

Contoh ini menunjukkan isu biasa dalam aplikasi ASP.NET MVC di mana

memaparkan nilai awal yang tidak dijangka dan bukannya nilai yang dikemas kini. TextBoxFor mari kita periksa tindakan MVC dan melihat senario:

Tindakan pengawal:

<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>
Salin selepas log masuk
Lihat:

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

<p>
    @Html.TextBoxFor(x => x.Latitude)
</p></code>
Salin selepas log masuk
Model:

<code class="language-csharp">public class DataSites
{
    public string Latitude { get; set; }
}</code>
Salin selepas log masuk
Masalahnya:

selepas menavigasi ke (menetapkan latitud kepada "latitude2") dan mengalihkan ke , paparan memaparkan "latitude2" dan bukannya "latitud" yang diharapkan. /Home/SomeInformation Index Penjelasan:

dengan model meluluskan data sebagai nilai laluan. Pengikat model lalai kemudian populates

dengan nilai ini ("latitude2"). Walaupun tindakan

cuba memberikan nilai baru ("latitud"), nilai sedia ada diutamakan. RedirectToAction ModelState Index Penyelesaian: ModelState

Dua pendekatan dengan berkesan menangani ini:

ModelState Clear:

Kosongkan
    sebelum memberikan nilai baru dalam tindakan
  1. : ModelState Index
Elakkan model mengikat:
<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>
Salin selepas log masuk
Mulakan contoh
    baru secara langsung dalam tindakan
  1. , memintas model mengikat sepenuhnya: DataSites Index memilih antara penyelesaian ini bergantung kepada sama ada anda perlu mengakses data dari
  2. untuk tujuan lain dalam tindakan
. Jika tidak, penyelesaian kedua (mengelakkan pengikatan model) adalah lebih bersih dan lebih cekap. Jika tidak, penjelasan
<code class="language-csharp">[HttpPost]
public ActionResult Index(DataSites dataSiteList)
{
    var test = new DataSites { Latitude = "LATITUDE" }; // No reliance on dataSiteList
    return View(test);
}</code>
Salin selepas log masuk
diperlukan.

Atas ialah kandungan terperinci Kenapa TextBox untuk memaparkan 'latitude2' dan bukannya 'latitud' selepas pengalihan di MVC?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan