0

我有以下模型。

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

2 回答 2

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");
}
于 2013-07-16T05:55:53.577 回答
1

您可以为 Id 放置一个隐藏字段并在您的操作方法中处理其他字段,如下所示:

public ActionResult SaveM(M m)
{
    var mToEdit = db.find(m.Id);
    mToEdit.A = m.A;
    db.SaveChanges();
    //.......
}
于 2013-07-16T05:57:24.233 回答