2012-03-15 38 views
0

我正在使用MVC Razor,当我尝试编辑某些东西时,我将它传递给ViewModel,它包含了所有必要的信息,我已经测试过了。为什么[HttpPost]只能选择'EditorFor'?

这是我的观点:

<div class="editor-label"> 
     @Html.LabelFor(model => model.CollectionId) 
    </div> 
    <div class="editor-field"> 
     @Html.DisplayFor(model => model.CollectionId) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.BrandName) 
    </div> 
    <div class="editor-field"> 
     @Html.DisplayFor(model => model.BrandName) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Season) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Season) 
     @Html.ValidationMessageFor(model => model.Season) 
    </div> 

正如你所看到的,我只使用@Html.EditorFor上的信息,他们可以改变,因为这是所有我想改变。但我觉得有必要向他们展示其他信息,以便他们确切知道他们正在编辑的内容。

我的问题是,我如何才能实现相当于传回信息的@Html.EditorFor,却没有真正允许它们进行编辑?

+1

如果信息没有被编辑,为什么你甚至需要在表单提交时将它传递给你的控制器?据推测,你不允许编辑它有一个很好的理由 - 如果你允许它回发数据,什么是阻止恶意用户编辑数据,他们通常不会被允许编辑? – mdm 2012-03-15 11:14:33

+0

有点难以识别他们想编辑的'Collection',只有一个字段的信息它不会? – ediblecode 2012-03-15 11:16:16

+0

这是非常重要的一点。即使你不允许编辑数据,“坏用户”也可以传递他自己改变的数据。您可以通过检查现有数据中的数据或仅更新所需的对象值来实现此目的。 – ChrisB 2012-03-15 11:24:03

回答

4

您必须使用Html.HiddenFor将其值返回给控制器。

例如

<div class="editor-field"> 
    @Html.DisplayFor(model => model.CollectionId) 
    @Html.HiddenFor(model => model.CollectionId) 
</div> 
+0

这仍然会显示数据吗? – ediblecode 2012-03-15 11:17:23

+0

如果您仍然使用DisplayFor:是 – ChrisB 2012-03-15 11:20:03

相关问题