2016-07-26 131 views
1

在查看我的模型類,我有一個枚舉類型屬性SubjectType如何設置空值(默認)到下拉列表中的MVC 4

[Required(ErrorMessage = "This field is required.")] 
public SubjectType SubjectType { get; set; } 

我想創建下拉此屬性的列表。但默認情況下,我希望將其設置爲null,以便用戶必須選擇某些內容,並且如果他不嘗試提交表單而不選擇任何選項,則會顯示驗證消息。

實現此目標的最佳方法是什麼?

我試圖改變SubjectType屬性爲空的,並且默認值設置爲,但仍審定通過了這一領域(在某種程度上)和形式提交給服務器。默認情況下,此字段的值設置爲枚舉定義中的第一個值。沒有JavaScript允許,我想保留所有代碼隱藏。我會很感激任何建議。

到目前爲止,我呈現這樣說:

@Html.DropDownList("SubjectType", EnumHelper.GetSelectList(typeof(SubjectType))) 
@Html.LabelFor(model => model.SubjectType) 
@Html.ValidationMessageFor(model => model.SubjectType) 
+0

你是如何渲染下拉?您的查看代碼?你如何通過項目(那些)來建立下拉? – Shyju

+0

編輯帖子; EnumHelper位於System.Web.Mvc的System.Web.Mvc程序集中。Html命名空間 – Koteczeg

+0

正在使用foreach來顯示列表中的一個選項嗎? – Steve

回答

1

你能解決這樣做的問題: 用onclick動作將提交按鈕更改爲按鈕,然後在javascript中驗證它,如果form和此枚舉字段有效,則使用jQuery提交表單。

+0

謝謝親愛的先生 – Koteczeg

0

編輯:我覺得這個問題是三折。首先你的屬性被命名爲SubjectType,但你的下拉列表被命名爲Type,所以它不能綁定到SubjectType。

秒,顯然你必須使用@ HTML.dropdownlistfor()。我做了一個與我的兩個不同版本dropdown和dropdownlistfor和dropdownlistfor是唯一一個添加驗證類(見下文)的視圖源

第三,我們需要添加選項標籤參數「Select a Type」作爲默認值。我相信現在它會爲你工作。

在型號:

[Required(ErrorMessage = "Error!")] 
public string SubjectType{ get; set; } 

在HTML:

@Html.DropDownListFor(m => m.SubjectType, new SelectList(Enum.GetNames(typeof(SubjectType))), "Select a Type", new { @class = "pretty" }) 

現在我看到你有配料中的枚舉我認爲,如果你與替換我的第二個PARAM這會就好了一個幫手。

DROPDOWNLIST VS選擇元素的DropdownlistFor渲染:

DROPDOWNLIST:

<select name="SubjectType" class="pretty" id="SubjectType">...</select> 

DropdownListFor:

<select name="SubjectType" class="pretty" id="SubjectType" data-val-required="Error!" data-val="true">...</select> 

正如你所看到的數據-VAL-要求和數據-VAL類失蹤當做一個簡單的下拉菜單時,不會打開對該屬性的驗證。對不起,到這裏來的所有痛苦。不要忘記標記我的權利,如果它的工作。

+0

它不會引發驗證消息,並將表單子集與SubjectType屬性值作爲枚舉定義中的第一個值;它只顯示附加選項「選擇一種類型」,它被設置爲默認 – Koteczeg

+0

,可能是我的必需屬性有問題?應該用「不需要空字符串」之類的東西替換它嗎? nah它沒有任何意義,podel中的屬性類型是枚舉而不是字符串 – Koteczeg

+0

讓我檢查這裏的東西 –