2012-03-22 97 views
1

我不得不出於某種原因使用一個隱藏的字段來保存最初發送到我的視圖(一個ViewModel發送到我的視圖與此Id)的Id。我知道我發送了有效的Id值......這不是問題。在回發站丟失值

因此,例如我在一個具有CarId的ViewModel中定位。在運行時期間,我檢查它是一個有效的整數,這是我從控制器的操作傳遞給該視圖的同一個整數。

問題是,因爲我沒有通過Razor在視圖的標記中的任何位置使用/引用該標識,所以我認爲這就是爲什麼它在回發過程中沒有被持久化。因爲我注意到,當我在標記中引用該字段時,它包含/持續回發。

即使我在佈局中指定要堅持整個模型本身,但它不會在該表單中使用它時不會保留該ID,因爲它在相關控制器中碰到了我的更新操作時:

@using (Html.BeginForm(null, null, FormMethod.Post, new { @model = Model })) 

所以,當這個帖子後面,我一定要添加這個,否則該ID是不與視圖模型

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

任何其他值持續知道我在這裏失蹤的基本面?

+0

是的,你需要使用一個隱藏的。考慮到邪惡的用戶可以通過Firebug或類似的東西改變這個值,你需要在服務器端重複這個字段的內容(例如,檢查是否ID是當前用戶的有效對象之一。 – Romias 2012-03-22 18:11:59

回答

1

您的POST操作將只接收實際在表單中的數據。
它並不神奇地得到模型的其餘部分。

還要注意攻擊者可以修改所有這些數據。

+0

但即使當我指定重新綁定我的Html.BeginForm模型?我正在重置模型類型以堅持通過回發所以我想。 – user1286569 2012-03-22 18:36:58

+0

添加查詢字符串參數的URL,但瀏覽器在提交表單之前刪除查詢字符串參數你需要使用隱藏的輸入。 – SLaks 2012-03-22 18:38:33