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

本文关键字:插入部 模型 属性 mvc | 更新日期: 2023-09-27 18:20:55

我有一个表,它有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();
    }

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

正如我在评论中提到的,视图模型可能会让事情变得更容易。下面是一些示例代码。

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

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

我想创建一个视图,要求用户输入一个新的firstname值。以下是我要做的——创建一个将与视图(.cs.html)文件关联的视图模型类:

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

视图模型只包含视图需要关心的属性。然后在控制器中我可以做:

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

该视图可能类似于:

@模型WebApplication1.Controllers.HomeIndexViewModel@{ViewBag.Title="主页";}

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

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

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

当您将数据发布回时,不会遇到由于属性RandomStuff为空而导致的验证错误,因为视图模型不关心该属性。视图模型只包含视图所需的数据,仅此而已。这是我一直在做的事情。