ホームページ >バックエンド開発 >C++ >MVCでのリダイレクトの後、「Latitude2」ではなく「Latitude2」をテキストボックスに表示するのはなぜですか?

MVCでのリダイレクトの後、「Latitude2」ではなく「Latitude2」をテキストボックスに表示するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-02-01 08:21:10267ブラウズ

Why Does My TextBoxFor Display

MVC TextBoxfor:初期値と更新値

この例は、asp.net MVCアプリケーションで一般的な問題を示しています。ここでは、更新された値の代わりに予期しない初期値を表示します。 TextBoxForMVCアクションを調べて、シナリオを表示しましょう

コントローラーのアクション:

ビュー:
<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>

モデル:
<code class="language-csharp">@model miniproj2.Models.DataSites

<p>
    @Html.TextBoxFor(x => x.Latitude)
</p></code>

問題:(latitudeを「latitude2」に設定する)に移動し、
<code class="language-csharp">public class DataSites
{
    public string Latitude { get; set; }
}</code>
にリダイレクトした後、ビューは予想される「緯度」の代わりに「latitude2」を表示した後です。

説明:/Home/SomeInformation Indexモデルを使用すると、

はルート値としてデータを渡します。 デフォルトのモデルバインダーは、この値( "Latitude2")に

に入力します。 アクションは新しい値(「緯度」)を割り当てようとしていますが、既存の値が優先されます。

ソリューション:RedirectToActionModelState 2つのアプローチが効果的にこれに対処します:Index ModelState

clear modelState:アクションで新しい値を割り当てる前に、

をクリアします:

  1. モデルバインディングを避けます:ModelState新しいIndexアクションで新しい
  2. インスタンスを直接開始し、モデルバインディングを完全にバイパスします:
<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. アクション内で他の目的でからデータにアクセスする必要があるかどうかによって異なります。 そうでない場合、2番目のソリューション(モデルバインディングの回避)はよりクリーンで効率的です。 それ以外の場合は、をクリアする必要があります。DataSites

以上がMVCでのリダイレクトの後、「Latitude2」ではなく「Latitude2」をテキストボックスに表示するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。