我最近意識到RequiredAttribute不適用於枚舉字段。比方說,我有兩個選擇元素,稱爲ddlOfficers和ddlApplicationTypes的窗體都在HtmlHelper方法的幫助下呈現。對於creting ddlOfficers輔助方法如下:如何使RequiredAttribute使用枚舉字段
@Html.DropDownListFor(x => x.OfficerID, Model.Officers, "<Choose>", new { id = "ddlAddressedOfficer" })
凡OfficerID是Nullable<int>
對於ddlApplicationTypes我不得不寫的擴展方法,它可以讓我爲枚舉領域創建下拉列表:
@Html.EnumDropDownListFor(x => x.ApplicationType, new { @class = "select-normal" })
其中ApplicationType是類型自定義枚舉調用AppType
public Enum AppType{
None=0,
Complaint,
Query,
Suggestion
}
我用RequiredAttribute裝飾了OfficerID和ApplicationType屬性。當我沒有選擇ddlOfficers上的任何內容時,我會在提交時收到驗證警告。但是當我沒有在ddlApplicationType上選擇任何東西時,我沒有收到任何警告。我可能知道問題的原因:如果我比較兩個選擇元素,我可以看到ddlOfficers的第一個選項(選擇)沒有指定值,選擇時導致驗證投訴。但ddlApplicationType的第一個選項的值爲「無」。所以驗證引擎會看到選定的選項有一個值,並且簡單地忽略它。你會建議怎麼做才能使它工作?
編輯:爲了使事情更加清楚地看到這裏有兩個選擇元素的HTML:
<select class="select-normal input-validation-error" data-val="true" data-val-required="Choose the addressed officer" id="ddlOfficers" name="OfficerID">
<option value=""><Choose></option>
<option value="1">Ben Martin</option>
<option value="2">Nick Carter</option>
<option value="3">Sebastian Van</option>
</select>
<select class="select-normal valid" data-val="true" data-val-required="Select the application type" id="ddlApplicationType" name="ApplicationType">
<option selected="selected" value="None"><Choose></option>
<option value="Complaint">Complaint</option>
<option value="Query">Query</option>
<option value="Suggestion">Suggestion</option>
</select>
如果它自己的輔助方法,你可以修改它來生成沒有價值的第一個選項元素 - 這看起來像'<選項值> - 選擇 - '。如果'ApplicationType'是一個帶有[[Required]'屬性的可爲空的枚舉,那麼如果選擇了第一個選項,它應該是無效的。 – 2014-08-28 12:37:59
@StephenMuecke,我希望你發佈這個答案。我跟着你的提示,達到了目標。謝謝。 – 2014-08-28 20:05:52