2013-02-05 45 views
1

我正在開發我的第一個MVC4應用程序,經過一些嘖嘖和一個原型,我覺得很舒服,足以潛入英寸我正在使用代碼優先的方法。我正處於能夠使用我的模型中的兩個類創建交匯表以通過慣例創建交匯表的過程,這很好。現在我有一個複選框列表,這個複選框與創建視圖中顯示的其他關聯的一端相關聯,這是我們期望的,我想要做的下一件事是以某種方式驗證並顯示錯誤消息,如果至少其中一個複選框未被選中。MVC4適當的方法驗證至少一個項目檢查清單

我的兩個模型是事件和類別

public class Event 
{ 
    public int EventID { get; set; } 
    [Required] 
    public string Title { get; set; } 
    public string Description { get; set; } 
    public string URL { get; set; } 
    public DateTime Published { get; set; } 
    public DateTime? Modified { get; set; } 
    public int Reputation { get; set; } 
    public int CityID { get; set; } 

    public virtual City City { get; set; } 

    public virtual ICollection<Category> Categories { get; set; } 
} 

    public class Category 
{ 
    public int CategoryID { get; set; } 
    [Required] 
    public string Name { get; set; } 
    public DateTime Created { get; set; } 
    public Boolean IsActive { get; set; } 

    public virtual ICollection<Event> Events { get; set; } 
} 

運行時,這也創造了一個EventCategory表,根據需要。

我的控制器是非常簡單的

 public ActionResult Create() 
    { 
     ViewBag.CityID = new SelectList(db.Cities, "CityID", "Name"); 
     ViewBag.Categories = new MultiSelectList(db.Categories, "CategoryID", "Name"); 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Create(Event _event) 
    { 

     if (ModelState.IsValid && ModelState["Categories"] != null) 
     { 
      db.Events.Add(_event); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     ViewBag.Categories = new MultiSelectList(db.Categories, "CategoryID", "Name"); 
     ViewBag.CityID = new SelectList(db.Cities, "CityID", "Name", _event.CityID); 
     return View(_event); 
    } 

,併產生對我的看法的複選框被

  <div class="editor-label"> 
      @Html.LabelFor(model => model.Categories, "Categories") 
     </div> 
     <div class="editor-field"> 
      @foreach (SelectListItem c in ViewBag.Categories) 
      { 
       <input value="@c.Value" type="checkbox" name="Categories"/>@c.Text<br /> 
      } 

     </div> 

這使得我能夠引用一個「分類」指數做ModelStateDictionary給了我作爲一個逗號分隔列表被檢查的類別的ID,我可以處理這個,我想知道的是在這一點我該如何去驗證至少有一個盒子是檢查類別?

我想這樣做是使用數據註釋,但我不知道這是怎麼做到的,因爲複選框列表看起來像一個hacky實現。我知道我可以在客戶端使用js,然後使用一些服務器端的東西來檢查這一點,但是我不確定在這種情況下如何從服務器端顯示錯誤,我也希望有更清潔的通過框架來完成它的方式。

+0

您可以添加'public string Category {get;設置;}'到你的'Events'類並用'[Required]'註釋它。 –

+0

http://stackoverflow.com/questions/11204464/mvc-4-checkbox-list-and-me?answertab=votes#tab-top 該線程是相關的。 – SpykeBytes

+0

事件和類別之間的關係是多對多的,這就是爲什麼我有我的模型創建將存儲這些鍵的聯結表,所以我不認爲在事件模型上添加屬性真的是我正在尋找的東西在這裏,因爲它是用Categories集合表示的。有沒有辦法在集合本身上做這項工作? –

回答

1

這是您需要的自定義驗證器。

Blog Link

相關問題