2013-10-10 133 views
3

我是MVC的新手,我仍在嘗試探索MVC內的東西。現在我來到了我需要實現下拉列表驗證的地方。驗證MVC中的下拉列表

我花了大量的時間在MVC中尋找驗證。但我力求得到適合我的問題的任何結果。請記住,我是MVC的新手,所以如果我的方法在執行驗證時出錯,請糾正我。

我創造了這樣的模型類:

public class ValidationModel 
    { 
    [Required(ErrorMessage = "Please select atleast one option")] 
    public string dropdown { get; set; } 
    } 
    } 

,在我的控制,我使用此代碼:

@using (Html.BeginForm("selectIndex", "Home", FormMethod.Post)) 
    { 
    <select name ="dropdwnMode" id="dropdwnMode" class="textbox"> 
    <option selected="selected" value="">Select Mode 
    @Html.ValidationMessageFor(Model => Model.dropdown) </option> 
    <option value="1"> Add or Update Customer </option> 
    <option value="2">Update Customer Credit</option> 
    </select> 
    } 

在這裏,我要的是,當我的下拉列表中選擇模式這是默認的,它應該顯示請至少選擇一個選項錯誤,如果用戶選擇第一或第二選項,則不應顯示此錯誤消息。

但是現在它不顯示任何消息,如果我使用上述方法。那麼有人可以指導我實現這個目標嗎?

回答

4

我會建議在模型上用兩個屬性替換你的「Dropdown」屬性 - 一個可以保存所選值和一個可以保存所有可能值的屬性。然後,您可以使用HTML助手(Razor語法)在視圖中創建下拉列表,並且MVC將負責驗證。

型號:

public class ValidationModel 
{ 
    /// <summary> 
    ///  ID of the selected option 
    /// </summary> 
    [Required(ErrorMessage = "Please select at least one option")] 
    public int SelectedOptionID { get; set; } 

    /// <summary> 
    ///  Possible values for the dropdown 
    /// </summary> 
    public IEnumerable<OptionModel> Options { get; set; } 
} 

OptionModel:

public class OptionModel 
{ 
    /// <summary> 
    ///  ID (key that uniquely identifies this option) 
    /// </summary> 
    public int ID { get; set; } 

    /// <summary> 
    ///  Name (value or display text that will be shown in the UI) 
    /// </summary> 
    public string Name { get; set; } 
} 

如果需要,您還可以在期權模型存儲等性能。或者,您可以使用鍵值對或字典而不是選項模型來避免創建類,該類會更快但不太清晰。

查看:

@model ValidationModel 

@using (Html.BeginForm("selectIndex", "Home", FormMethod.Post)) 
{ 
    @Html.ValidationMessageFor(Model => Model.SelectedOptionID) 

    @Html.DropDownListFor(m => m.SelectedOptionID, 
     new SelectList(Model.Options, "ID", "Name"), 
     "Select an option") // Default text before the user has selected an option 
} 

你能叫上名字的選項和SelectedOptionID好一點取決於您的實現,以澄清其用法。

通過此實現,您可以(也應該)從控制器填充選項列表。當用戶選擇一個選項時,所選選項將被填充。就像這樣:

控制器:

public ActionResult YourAction() 
{ 
    ValidationModel model = new ValidationModel(); 
    model.Options = new List<OptionModel> { 
     new OptionModel { ID = 1, Value = "Add or Update Customer" }, 
     new OptionModel { ID = 2, Value = "Update Customer Credit" } 
    } 

    return View("YourViewName", model); 
} 

作爲一個方面說明,我會建議進行命名,ValidationModel什麼用它做的視圖(例如HomepageModel如果你的觀點是整個網頁或NavigationFormModel如果您視圖只是包含導航下拉菜單的部分視圖)。

+0

嗨,我遵循你的方法。不知道我在做什麼錯誤。當我在選擇一個選項時,它不會觸發錯誤消息。 – Ajay