如何在mvc 5中插入部分模型属性

时间:2015-11-06 13:21:14

标签: c# asp.net-mvc entity-framework

我有一个包含12个字段的表,除了Id字段(主键)之外都允许null,我使用mvc 5的数据库第一个工作流,在我的模型注释中需要所有12个字段,我只显示四个字段在一个视图中,其余视图在另一个视图中,但在尝试从具有四个字段的视图中向表中插入值时,它报告错误,其他字段是必需的,如何仅插入这四个字段,同时删除其余要求注释?这是我的代码:

 public ActionResult Estate(Customer cus)
    {
        try
        {
            var customer = new Customer
            {
                ClientId = cus.ClientId,
                ClientGroup = cus.ClientGroup,
                OrgName = cus.OrgName,
                Branch = cus.Branch

            };

            db.Customers.Add(customer);
            db.SaveChanges();


        }
        catch (Exception ex)
        {

           ModelState.AddModelError("",ex.Message);
        }

        return View();
    }

1 个答案:

答案 0 :(得分:2)

正如我在评论中提到的,视图模型可能会让您更轻松。这是一些示例代码。

假装我有一个Person类,来自实体框架

public class Person
{
    [Required]
    public string Firstname { get; set; }

    [Required]
    public string RandomStuff { get; set; }
}

我想创建一个视图,要求用户输入新的firstname值。这就是我要做的 - 创建一个与视图(.cshtml)文件关联的viewmodel类:

public class HomeIndexViewModel
{
    [Required]
    public string Firstname { get; set; }
}

viewmodel仅包含视图需要关注的属性。然后在控制器中我可以做到:

public ActionResult Index()
{
    var viewModel = new HomeIndexViewModel();

    return View(viewModel);
}

视图可能类似于:

@model WebApplication1.Controllers.HomeIndexViewModel @ {     ViewBag.Title ="主页&#34 ;; }

@using (Html.BeginForm())
{
    @Html.TextBoxFor(model => model.Firstname)
}

然后当您将数据发回控制器时:

[HttpPost]
public ActionResult Index(HomeIndexViewModel viewModel)
{
    var person = new Person() { Firstname = viewModel.Firstname };

    // blah....
}

当您发回数据时,您不会遇到由属性RandomStuff为空导致的验证错误,因为viewmodel不关心该属性。 viewmodel仅包含视图所需的数据,不超过该数据。 这是我一直在做的事情。