Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 编辑部分字段?_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 编辑部分字段?

C# 编辑部分字段?,c#,asp.net-mvc,asp.net-mvc-4,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.NETMVC4页面只需编辑一列。我必须为所有其他列添加@Html.HiddenFor(),否则,数据库列中

我有下面的型号

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.NETMVC4页面只需编辑一列。我必须为所有其他列添加
@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)
    ......
}

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");
}

您只需为Id设置一个隐藏字段,并在操作方法中处理其他字段,如下所示:

public ActionResult SaveM(M m)
{
    var mToEdit = db.find(m.Id);
    mToEdit.A = m.A;
    db.SaveChanges();
    //.......
}