模型中需要两个中的一个字段

时间:2012-10-25 12:04:25

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我有一种情况,我希望在模型中只需要两个中的一个字段。

    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)
        {
        ...
        }..

2 个答案:

答案 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" />
}