2012-10-25 40 views
1

我有一種情況,我想在模型中只需要兩個字段中的一個。這兩個模塊中的一個將需要

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

更清晰請 – Yasser

+0

對不起,嗯,我有一個表格。在這種形式下,這兩個領域。用戶必須填寫其中一個。填寫一個將是必需的。一個字段顯示VIN上的AutoID和另一個字段。當用戶填寫自動識別碼時,一切正常。當完成VIN時,ModelState.IsValid爲false:(在檢查ModelState AutoID字段完成之前。 – user1644160

回答

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" /> 
} 
相關問題