Asp.net mvc MVC3将模型从视图传递到控制器

Asp.net mvc MVC3将模型从视图传递到控制器,asp.net-mvc,asp.net-mvc-3,razor,Asp.net Mvc,Asp.net Mvc 3,Razor,我有一个使用实体框架作为模型层的MVC3应用程序 在EmployeeController中,我有: public ActionResult GetEmployeeEdit(String id) { // Get the desired Employee var model = GetEmployees().FirstOrDefault(o=>o.EFolderid == id); return View("EmployeeEdit", model); } priv

我有一个使用实体框架作为模型层的MVC3应用程序

在EmployeeController中,我有:

public ActionResult GetEmployeeEdit(String id)
{
    // Get the desired Employee
    var model = GetEmployees().FirstOrDefault(o=>o.EFolderid == id);
    return View("EmployeeEdit", model);
}

private IQueryable<Employee> GetEmployees()
{
    // Returns IQueryable<Employee>
    return _employeeService.GetTable();
}
我遇到的问题是employee对象上的所有属性都为null,employee.NameFirst和employee.NameLast除外,这两个属性恰好是用Html.EditorFor在视图中公开的属性

总之,我得到了一个Employee模型对象,它是完全水合的。我将此模型从控制器传递到视图。在视图中,允许更新选定字段。然后将员工模型传递回控制器,在控制器中保存更新


我的问题是如何保持最初从控制器传递到视图的Employee模型的完整性。换句话说,我想让模型

在Post操作中获得模型属性,您需要在表单中包含所有属性。
这对于正确的模型序列化是必要的

要在Post操作中获取模型属性,需要在表单中包含所有属性。 这对于正确的模型序列化是必要的

尝试使用以下代码:

[HttpGet]
public ActionResult SaveEmployee([Bind(Include = "NameFirst,NameLast,EFolderid")] Employee employee)
{
    if (ModelState.IsValid)
    {
        // Do your staff
        // The employee object's FolderId value will be not null
    }

    // Just getting a model to satisfy the function
    var model = GetEmployees().FirstOrDefault();
    return View("EmployeeEdit", model);
}
这将强制对象employee的数据成员“NameFirst、NameLast、EFolderid”保持不变。您需要在include语句中声明希望在Http请求期间保留的所有成员

您还应在视图中的表单内添加此代码,否则EFolderid数据将丢失:

@Html.HiddenFor(o=> @Model.EFolderid)
为要保留的每个成员添加“HiddenFor”声明。

尝试使用以下代码:

[HttpGet]
public ActionResult SaveEmployee([Bind(Include = "NameFirst,NameLast,EFolderid")] Employee employee)
{
    if (ModelState.IsValid)
    {
        // Do your staff
        // The employee object's FolderId value will be not null
    }

    // Just getting a model to satisfy the function
    var model = GetEmployees().FirstOrDefault();
    return View("EmployeeEdit", model);
}
这将强制对象employee的数据成员“NameFirst、NameLast、EFolderid”保持不变。您需要在include语句中声明希望在Http请求期间保留的所有成员

您还应在视图中的表单内添加此代码,否则EFolderid数据将丢失:

@Html.HiddenFor(o=> @Model.EFolderid)

为每个要保留的成员添加“HiddenFor”声明。

我走了另一条路。我创建了一个视图模型,然后使用AutoMapper将Employee对象的属性映射到视图模型。我将视图模型传递给视图,进行更改,然后将视图模型传递回操作。然后,我可以使用AutoMapper将视图模型映射回Employee对象的新实例,然后保留更改。

我采用了不同的方法。我创建了一个视图模型,然后使用AutoMapper将Employee对象的属性映射到视图模型。我将视图模型传递给视图,进行更改,然后将视图模型传递回操作。然后,我可以使用AutoMapper将视图模型映射回Employee对象的新实例,然后保存更改