如何在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();
}
正如我在评论中提到的,视图模型可能会让事情变得更容易。下面是一些示例代码。
假设我有一个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
为空而导致的验证错误,因为视图模型不关心该属性。视图模型只包含视图所需的数据,仅此而已。这是我一直在做的事情。