2012-03-22 89 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