7

ビューでは、私はこのオーバーロードを使用していますHtmlHelper.TextBox

public static MvcHtmlString TextBox(
    this HtmlHelper htmlHelper,
    string name,
    Object value
)

ドキュメントには次のように記載されています。

価値

タイプ:System.Object

テキスト入力要素の値。この値がnullの場合、要素の値はオブジェクトから取得されViewDataDictionaryます。そこに値が存在しない場合、値はModelStateDictionaryオブジェクトから取得されます。

このオーバーロードを呼び出すときにを提供しますvalueが、この値はnullではありません。ModelStateDictionaryそれでも、テキストボックスの値は、テキストボックスが存在する場合は常にそこから取得されます。

テキストボックスにインラインで提供された値を使用させるには、最初にコントローラーでモデルをリセットする必要があります(または、キーコレクションからテキストボックスの名前のキーを削除します)。

同じことが、によってレンダリングされる他のコントロールにも当てはまりますHtmlHelper

私の理解はどこが間違っていますか?それとも、それはドキュメントのバグですか?

4

3 に答える 3

2

ModelStateだけでなく、すべての入力ヘルパーで常に優先されますTextBox。これにより、ビューでデフォルト値を指定でき、POST後に、投稿された値を手動でビューに渡すことなく、投稿された値(ModelStateから取得)をレンダリングできます。別の値を使用するには、ModelStateからエントリを削除する必要があります。

于 2012-09-14T23:51:15.280 に答える
1

これはモデルバインダーがどのように機能するかであり、おそらく失敗したポストバックまたは検証の失敗からの値を保持するために、modelstateから値を取得します。Html属性を使用して値を設定してみましたか

Html.TextBox("Id", new { Value = Model.Id})

Si

于 2012-09-05T10:33:46.247 に答える
-1

多分これは役立つでしょう。

以下のプロパティとViewData["textboxvalue"]でviewmodelを使用する

public string Id { get; set; }

「value」パラメーターにバインドできるオブジェクトを指定した場合、htmlヘルパーは常にその値を使用します。

-ビューモデルにバインドされたテキストボックスの値-これらはモデルのIDを示します

@Html.TextBox("Id", Model.Id)

-ビューデータから提供された値を含むテキストボックス-これらはビューデータの値を示します

@Html.TextBox("Id", ViewData["textboxvalue"])

提供された名前がプロパティ名と同じでなくても、値はモデルによって提供されたもののままになります

-ビューモデルにバインドされたテキストボックスの値-これらはモデルのIDを示します

@Html.TextBox("Id2", Model.Id)

-ビューデータから提供された値を含むテキストボックス-これらはビューデータの値を示します

@Html.TextBox("Id2", ViewData["textboxvalue"])

あなたがあなた自身の習慣を提供するならば

-ハードコードされた値が提供されたテキストボックス-これは、ビューで提供された文字列を示します

@Html.TextBox("Id", "my hardcoded value in view")

ドキュメントには、次のように「value」パラメータを入力しない場合と記載されています。

@Html.TextBox("Id", null)

次に、mvcフレームワークは、ビューにバインドされているモデルとデータディクショナリの両方を自動的に検索しようとします。

この場合は、

-ビューモデルで「Id」というプロパティが見つかりました。モデルの値に設定されたテキストボックスの値

@Html.TextBox("Id", null)

ただし、「名前」の値がモデル/辞書のプロパティ/キーでない場合、フレームワークは値を見つけることができなかったため、テキストボックスの値は空の文字列になります

-ビューモデルまたはビューデータのプロパティではない名前のテキストボックス

@Html.TextBox("Id2", null)
于 2012-09-14T15:59:31.767 に答える