0

次の HTML ヘルパー テキスト ボックスがあります。

@Html.TextBoxFor(m => m.Email, Model.Active ? new { @readonly = "readonly", @style = "background:#E8E8E8" } : new Object { })

アクション(返されるモデル内)で電子メールの値を変更し、(モデルactive=true内にもある)を読み取り専用に設定すると、電子メールのテキストボックスの値はモデルからの新しい値で更新されず、チェックしましたモデルが新しい電子メールとアクティブ = 1 で戻ることを確認します。

モデルからの値がレンダリングされる前に読み取り専用が設定されているかのようです。

どんな助けでも大歓迎です、ありがとう

4

1 に答える 1

0

モデルをポストバックすると、その値が に追加されModelStateます。Html ヘルパーModelStateは、モデル プロパティの値ではなく の値にバインドするため、POST メソッドでモデル プロパティの値を変更しても、値を設定する前にモデルの状態をクリアしない限り、ビューに反映されません。

ModelState.Clear(); // clears all properties

また

if (ModelState.ContainsKey("active"))
{
    ModelState["active"].Errors.Clear(); //clears the property 'active'
}

この動作の理由は、この回答の 2 番目の部分で説明されています。

ただし、クリアModelStateは検証エラーもクリアするため、注意して使用する必要があります。いずれにしても正しいアプローチはPRGパターンに従うことです。

于 2015-04-28T12:04:01.867 に答える