编辑部分字段?

时间:2013-07-16 05:49:36

标签: c# asp.net-mvc asp.net-mvc-4

我有以下型号。

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)
    ......
}

2 个答案:

答案 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();
    //.......
}