【发布时间】:2012-03-31 17:11:47
【问题描述】:
请帮助解决这样的问题,不要严格判断,因为我是 MVC 的新手: 我有一个模型,用于在我的数据库中按 ID 存储用户名
public class Names
{
public int NameId { get; set; }
public string Username { get; set; }
}
, 控制器
[HttpPost]
public ActionResult EditforModel(Names Name)
{
if (ModelState.IsValid)
{
db.Entry(Name).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(Name);
}
添加和编辑视图 添加效果很好,问题是关于编辑 我用
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend> legend </legend>
@Html.EditorForModel()
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
编辑我的模型。 当试图进入这个视图时,我看到了一个 ID 和用户名的编辑器,但是如果我填写 ID - 我有错误,因为在 DB 中没有具有此类 ID 的条目。 好的。让我们寻找隐藏编辑器的属性。 [ScaffoldColumn(false)] 类似于标记是否为 Id 呈现编辑器。 将它应用到我的模型中,我的视图中发布了“0”id。尝试另一个 attr。 [ReadOnly(true)] 使字段成为只读字段。但与此同时,我在发布 ID 时得到了“0”。 修改视图我为模型中的每个字段放置了一个编辑器
@Html.HiddenFor(model => model.NameId)
@Html.EditorFor(model => model.Username)
但使用它很危险,因为某些用户可能会通过 post-request 发布错误的 Id。
我不能使用 [ScaffoldColumn(false)] 在控制器的 [Httppost] 操作中应用 Id,通过在 DB 中搜索适当的用户条目,因为名称已更改.. 我不敢相信@Html.HiddenFor 是唯一的出路。但找不到一个:(
【问题讨论】:
-
在隐藏的输入或动作方法参数中贴上id真的不危险。危险的是不验证当前用户实际上可以修改传递的 id。
标签: asp.net-mvc-3 http-post member-hiding