请帮忙解决这个问题并且不要严格判断因为我是MVC的新手:我有一个模型用于在我的数据库中按ID存储用户名
public class Names
{
public int NameId { get; set; }
public string Username { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
,一个conrtoller
[HttpPost]
public ActionResult EditforModel(Names Name)
{
if (ModelState.IsValid)
{
db.Entry(Name).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(Name);
}
Run Code Online (Sandbox Code Playgroud)
添加和编辑视图添加工作正常,问题是关于编辑我使用
@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>
Run Code Online (Sandbox Code Playgroud)
编辑我的模型.当我试图转到这个视图时,我看到了Id和用户名的编辑器,但是如果我填写Id - 我有错误,因为DB中没有带有这样ID的条目.好的.让我们寻找隐藏编辑器的属性.[ScaffoldColumn(false)]类似于标记是否为Id呈现编辑器.将它推荐给我的模型我从我的View中发布了"0"id.尝试另一个attr.[ReadOnly(true)]使字段成为只读字段.但同时我在发布Id时得到"0".修改视图我为模型中的每个字段放置了一个编辑器
@Html.HiddenFor(model => model.NameId)
@Html.EditorFor(model => model.Username)
Run Code Online (Sandbox Code Playgroud)
但使用它是危险的,因为一些用户可以发布错误的Id throgh post-request.
我不能使用[ScaffoldColumn(false)]在控制器的[Httppost]动作中应用Id,通过在DB中搜索适当的用户条目,因为名称已更改..我不敢相信@ Html.HiddenFor是唯一的出路.但找不到一个:(