晚上好,我有一個關於下拉列表值驗證的問題。我有一個視圖綁定到名爲ReservationData
的視圖模型類型。ASP.NET MVC 3 - 驗證問題
此對象包含List<VehicleData>
類型的屬性CustomerVehicles
。 VehicleData
有兩個int
屬性VehicleMakeId
和VehicleModelId
。
在我的觀點中,我試圖循環使用CustomerVehicles
集合中的物品數量,並使用DropDownListFor
爲每個物品顯示兩個下拉框,一個車輛下拉框和一個車型下拉框。
當我嘗試提交併驗證時,屏幕上未顯示任何驗證錯誤。
以防萬一您想知道我爲每個下拉列表添加了ValidationMessageFor
。我不確定這是否與我的視圖模型的結構及其複雜性有關,以及如何命名控件或需要如何設置id。任何幫助將不勝感激。
下面是遍歷集合中的代碼:
@for (var i = 0; i < Model.CustomerVehicles.Count(); i++)
{
var vehicleNumber = i + 1;
<div class="vehicle-selection-wrapper">
<div class="content-container">
<h3>
Vehicle @vehicleNumber</h3>
<img class="vehicle-image" alt="manufacturer image" src="@Url.Content("~/Content/images/default-vehicle.gif")" /><br />
@Html.LabelFor(m => m.CustomerVehicles[i].VehicleMakeId)
@Html.DropDownListFor(m => m.CustomerVehicles[i].VehicleMakeId
, new SelectList(Model.VehicleMakes, "Id", "Name")
, @UIDisplay.Dropdown_DefaultOption, new { @class = "long-field" })<br />
@Html.ValidationMessageFor(m => m.CustomerVehicles[i].VehicleMakeId)<br />
@Html.LabelFor(m => m.CustomerVehicles[i].VehicleModelId)
@Html.DropDownListFor(m => m.CustomerVehicles[i].VehicleModelId
, new SelectList(new List<CWR.Domain.VehicleModel>(), "Id", "Name")
, @UIDisplay.Dropdown_DefaultOption, new { @class = "long-field" })
@Html.ValidationMessageFor(m => m.CustomerVehicles[i].VehicleModelId)
</div>
</div>
}
確定,所以我還注意到,在生成的HTML所生成的選擇缺少其相關聯的元件的HTML5數據-VAL屬性來處理驗證。下面是生成的HTML
<select class="long-field" id="CustomerVehicles_0__VehicleMakeId" name="CustomerVehicles[0].VehicleMakeId"><option value="">-- Select --</option>
</select><br />
<span class="field-validation-valid" data-valmsg- for="CustomerVehicles[0].VehicleMakeId" data-valmsg-replace="true"></span><br />
<label for="CustomerVehicles_0__VehicleModelId">Model</label>
<select class="long-field" id="CustomerVehicles_0__VehicleModelId" name="CustomerVehicles[0].VehicleModelId"><option value="">-- Select --</option>
</select>
<span class="field-validation-valid" data-valmsg-for="CustomerVehicles[0].VehicleModelId" data-valmsg-replace="true"></span>
此外,在我VehicleData
類VehicleMakeId
和VehicleModelId
性能都裝飾有一個Required
屬性。
UPDATE:
好了,所以我在測試,發現如果我把我的代碼相同,除了我交換Html.DropdownListFor
電話與Html.TextboxFor
調用,那麼驗證工作。什麼可能導致這個?它可能是一個框架錯誤與不顯眼的驗證?
UPDATE:包含修復
所以在ASP.NET Forums張貼同樣的問題後,我能得到一個解決方案。在這篇文章中,您將能夠看到在不顯眼的驗證框架中存在一個錯誤,以及它如何處理下拉列表的驗證。用戶委員會在解釋問題方面做得很好,並且在將來幫助其他人避免這個問題的解決方案(包括示例代碼),或者至少在微軟修復框架之前做得很好。
謝謝大家的幫助。
您是否有如何在視圖中使用此自定義助手的示例?謝謝。 – Brandon 2012-01-11 04:29:14