我有以下型号。
public class M
{
public int Id { get; set; }
public int A { get; set; }
public int B { get; set; }
public int C { get; set; }
public int D { get; set; }
....
}
Asp.Net Mvc 4页面只需编辑一列。我必须为所有其他列添加@Html.HiddenFor()
- 否则B,C,D ....的数据库列将重置为0。这是一种避免它的方法吗?
@model MyMvc.Models.M
@using (Html.BeginForm()))
{
@Html.HiddenFor(m => m.Id)
@Html.EditorFor(m => m.A)
@Html.HiddenFor(m => m.B)
@Html.HiddenFor(m => m.C)
@Html.HiddenFor(m => m.D)
......
}
答案 0 :(得分:1)
HiddenFor
只生成隐藏字段,但这绝不会确保不会编辑值。简单的F12点击,任何人都可以使用开发人员工具编辑值。相反,您应该使用该单个字段创建ViewModel并检查服务器端的所有内容
public class EditMViewModel
{
public int A { get; set; }
}
在控制器动作中有类似的东西
public ActionResult Edit(int id, EditMViewModel m)
{
var someObject = LoadFromDb(id);
if (ModelState.IsValid)
{
someObject.A = m.A;
SaveToDb(someObject)
}
return RedirectToAction("Index");
}
答案 1 :(得分:1)
您可以为Id添加隐藏字段,并在您的操作方法中处理其他字段,如下所示:
public ActionResult SaveM(M m)
{
var mToEdit = db.find(m.Id);
mToEdit.A = m.A;
db.SaveChanges();
//.......
}