由于某种原因,我不得不使用隐藏字段来保存最初发送到我的视图的ID(ViewModel会通过此ID发送到我的视图)。我知道我发送的是有效的身份证明......这不是问题所在。
所以例如我在一个有CarId的ViewModel中进行搜索。在运行时,我检查并且它是一个有效的整数,我从控制器的动作传递给它的相同整数将它发送到该视图。
问题是,因为我没有通过Razor在视图的标记中的任何地方使用/引用该ID,我认为这就是为什么它不会在回发期间保持不变。因为我注意到当我在标记中引用该字段时,它包含/保留了回发。
即使我在布局中有这个,指定持久化整个模型本身,当它在相关控制器中点击我的Update操作时我没有在表单中使用它时,它不会持久存在:
@using (Html.BeginForm(null, null, FormMethod.Post, new { @model = Model }))
所以当这个帖子回来时,我必须添加这个,否则Id不会与ViewModel中的其他值保持一致
@Html.HiddenFor(model => model.CarId )
任何人都知道我在这里缺少什么基础知识?
答案 0 :(得分:1)
您的POST操作只会接收表格中实际存在的数据 它不会神奇地获得模型的其余部分。
另请注意,攻击者可以修改所有这些数据。