2015-01-13 70 views
1

我的MVC應用程序中有一個下拉列表,這是我的表單中的必填字段。檢查模型狀態是否對MVC中的值有效

我已經創建並填寫了我的名單像這樣:

@Html.DropDownListFor(x => x.ServiceName, 
        new SelectList(
         new List<Object> 
         { 
          new { value = "Empty", text = "Select..."}, 
          new { value = "Service Name 1", text = "Service Name 1"}, 
          new { value = "Service Name 1", text = "Service Name 2"}, 
          new { value = "Service Name 1", text = "Service Name 3"}, 
          new { value = "Service Name 1", text = "Service Name 4"} 
         }, 
          "value", 
          "text", 
          0), new { @class = "form-control" }) 

我需要我的表格即可返回一條消息,告訴他們需要從該菜單是他們做選擇一個選項,用戶不選擇任何東西。我的服務名稱在我的Model類中有[Required(ErrorMessage = "Service Name must be selected")]

它看起來像這樣:

[Required(ErrorMessage = "Service Name must be selected")] 
public string ServiceName { get; set; } 

但是我不知道我怎麼能檢查針對此值。到目前爲止,我已經嘗試了以下方法:

if(newMember.getProperty("serviceManager").Value == "0") 
{ 
    ModelState.IsValid = false; 
} 

但這不起作用。我已經嘗試了上述的一些變體,但他們也沒有工作。我目前用谷歌搜索找到答案,但我沒有太多的運氣。

難道有人請向我解釋我如何能夠實現我想實現的目標?

編輯

剛剛更新我的代碼,以顯示新的測試,我只是完成,但它仍然沒有返回回一個錯誤,告訴我,當我提出一個空的形式服務必須被選中。

+2

如果選擇了第一個選項(值= 0),是否意味着它要失效? –

+0

是的,這是我想要做的 – N0xus

+0

是你的'ServiceName'屬性'int'還是'可空'並且它有'[Required]'屬性? –

回答

1

使用的DropDownListFor()呈現一個選項標籤過載,使你ServiceName屬性爲空的與[Required]屬性。您現有的SelectList問題是您包含第一個具有值(「空」)的選項,該值是一個有效的字符串,因此它通過驗證。

型號

[Required] 
public string ServiceName { get; set; } 

控制器

List<string> services = new List<string>() { "Service Name 1", "Service Name 2", "Service Name 3", "Service Name 4" }; 
ViewBag.Services = new SelectList(services); 
return View(yourModel); 

查看

@Html.DropDownListFor(x => x.ServiceName, (SelectList)ViewBag.Services, "--Please Select--", new { @class = "form-control" }) 
@Html.ValidationMessagFor(x => x.ServiceName) 

注意SelectList不包含元素 「 - 請選擇」。DropDownListFor()的第三個參數添加了標籤選項,該選項沒有值<option value>--Please Select--</option>,如果選中該選項將導致該屬性無效。

1

你有你的getProperty來獲取serviceManager,但你查看的是綁定到ServiceName。

嘗試將其更改爲...

if(newMember.getProperty("ServiceName").Value == "0") 

OR

我沒有獲得在一分鐘的Visual Studio這樣的代碼可能不準確。

@Html.DropDownListFor(x => x.ServiceName, 
       new SelectList(
        new List<Object> 
        { 
         new { value = 1, text = "Service Name 1"}, 
         new { value = 2, text = "Service Name 2"}, 
         new { value = 3, text = "Service Name 3"}, 
         new { value = 4, text = "Service Name 4"} 
        }, 
         "value", 
         "text", 
         0), "Select...", new { @class = "form-control" }) 

,如果你有[必需]在您的視圖模型的服務名稱,然後在你的控制器,你將能夠做到ModelState.IsValid例如

if(ModelState.IsValid){ 
    // Do code here if it is valid 
}else{ 
    return View(viewModel) 
}