2012-03-22 10 views
1

元々私のビューに送信されたIDを保持するために何らかの理由で非表示フィールドを使用しなければなりませんでした(ViewModelはこのIdで私のビューに送られます)。私は有効なID値を送信していることを知っています...それは問題ではありません。PostBackの値を失う

たとえば、私はCarIdを持つViewModelを使用しています。実行時にチェックし、有効な整数です。この整数は、このビューに送信したコントローラのアクションから渡された整数と同じです。

私はRazor経由でビューのマークアップのどこにでもそのIDを使用/参照していないので、ポストバック時にそれが保持されていないのが問題です。マークアップでそのフィールドを参照すると、ポストバックが含まれています。

モデル全体を保持するようにレイアウトにしていますが、関連するコントローラの更新アクションにヒットしたときにそのIDを保持しません。

この記事は、バック、私が持っているとき
@using (Html.BeginForm(null, null, FormMethod.Post, new { @model = Model })) 

だから、これを追加するか、他Idが、私はファンダメンタルズのようここに欠けているものを知っているのViewModel

@Html.HiddenFor(model => model.CarId) 

誰でも中に他の値に保持されませんか?

+0

はい、Hiddenを使用する必要があります。悪意のあるユーザーがFirebugなどでその値を変更できるようになると、そのフィールドにあるサーバー側のチャックを倍増する必要があります(たとえば、IDが現在のユーザーの有効なオブジェクトの1つであるかどうかを確認してください)。 – Romias

答えて

1

あなたのPOSTアクションは、実際にフォームに入っているデータのみを受信します。
それは魔法のように残りのモデルを取得しません。

攻撃者はこれらのデータをすべて変更できることにも注意してください。

+0

しかし、私がHtml.BeginFormの中でモデルを再バインドするよう指定しても、私は思っていたのでポストバックのためにモデルタイプをリセットしています。 – user1286569

+0

URLにクエリ文字列パラメータを追加しますが、隠れた入力を使う必要があります。 – SLaks

関連する問題