ASP.NET MVC默认情况下修改了隐藏值

时间:2016-03-01 09:22:30

标签: asp.net asp.net-mvc

我目前在asp.net MVC的网站上工作。我有一个视图来编辑我的模型,但此模型中的某些项目只能由管理员修改。

所以我为基本用户删除了一些editorfor(),一切正常...... 直到我看到:如果基本用户编辑模型,则为其隐藏的字段将被修改为默认值,而不是管理员修改的前一个字段。

有人知道我怎样才能保存以前的值,即使它们不在editorfor()中?

代码:

@Html.EditorFor(model => model.name) 
@if (ViewBag.Role == "Admin")
{
  @Html.EditorFor(model => model.age)  
  // If admin is connected, he can edit age => no problem
}
// if a user modify name but don't touch age because it's for admin only, the model age will get 0

提前致谢

2 个答案:

答案 0 :(得分:1)

@Html.HiddenFor(m = m.age)

简单回答我的愚蠢问题,我先尝试过但它没有用,但现在它已经解决了。感谢Stephen Muecke。

答案 1 :(得分:1)

@Html.EditorFor(model => model.name) 
@if (ViewBag.Role == "Admin")
{
  @Html.EditorFor(model => model.age)  
  // If admin is connected, he can edit age => no problem
}

如果我们举个例子,那么年龄只适用于管理员。因此,当基本用户编辑此页面时,不满足时间条件,并且不会为基本用户呈现@Html.EditorFor(model => model.age)。因此,当您发布表单时,时间年龄的值将不会传递给控制器​​,因为年龄不会以表单形式呈现。所以它将保存您设置的默认值。 解决方案是你必须在if条件下使用隐藏字段。所以价值将保持,因为它是控制器 - >查看 - >控制器。