我有一种情况,我希望在模型中只需要两个中的一个字段。
public int AutoId { get; set; }
public virtual Auto Auto { get; set; }
[StringLength(17, MinimumLength = 17)]
[NotMapped]
public String VIN { get; set; }
如果有人进入vin,则会在AutoID上的控制器中进行转换。如何强制控制器做这样的工作?
public ActionResult Create(Ogloszenie ogloszenie) {
information.AutoId = 1;
if (ModelState.IsValid)
{
...
}..
答案 0 :(得分:1)
您可以实现自定义验证属性,以检查是否存在任何必填字段。
有关自定义验证属性的更多信息:How to create custom validation attribute for MVC
答案 1 :(得分:0)
尝试使用这种方法:
控制器:
public ActionResult Index()
{
return View(new ExampleModel());
}
[HttpPost]
public ActionResult Index(ExampleModel model)
{
if (model.AutoId == 0 && String.IsNullOrEmpty(model.VIN))
ModelState.AddModelError("OneOfTwoFieldsShouldBeFilled", "One of two fields should be filled");
if (model.AutoId != 0 && !String.IsNullOrEmpty(model.VIN))
ModelState.AddModelError("OneOfTwoFieldsShouldBeFilled", "One of two fields should be filled");
if (ModelState.IsValid)
{
return null;
}
return View();
}
视图:
@using(Html.BeginForm(null,null,FormMethod.Post))
{
@Html.ValidationMessage("OneOfTwoFieldsShouldBeFilled")
@Html.TextBoxFor(model=>model.AutoId)
@Html.TextBoxFor(model=>model.VIN)
<input type="submit" value="go" />
}