我有一个包含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();
}
答案 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仅包含视图所需的数据,不超过该数据。
这是我一直在做的事情。