请帮助解决这样一个问题,不要严格判断,因为我是 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 是唯一的出路。但找不到一个:(