Добрый вечер у всех есть вопросы относительно проверки значений выпадающего списка. У меня есть представление, связанное с типом модели представления, называемым ReservationData
.ASP.NET MVC 3 - вопрос валидации
Этот объект содержит имущество CustomerVehicles
типа List<VehicleData>
. VehicleData
имеет два int
объектов недвижимости VehicleMakeId
и VehicleModelId
.
На мой взгляд, я пытаюсь зациклиться на количестве элементов в коллекции CustomerVehicles
и отображать два выпадающих списка для каждого, выпадающее меню автомобиля и выпадающее меню модели автомобиля, используя DropDownListFor
.
Когда я пытаюсь отправить и подтвердить, я не вижу никаких ошибок проверки, отображаемых на экране.
На всякий случай вам интересно, что я добавил ValidationMessageFor
для каждого выпадающего списка. Я не уверен, что это проблема со структурой моей модели представления и ее сложностью и как нужно управлять элементами управления или как нужно устанавливать идентификаторы. Любая помощь будет принята с благодарностью.
Вот код для цикла по коллекции:
@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>
}
Ok поэтому я также заметил, что в генерируемый HTML выбирает, которые генерируются отсутствуют атрибуты данных-валин HTML5, которые связаны с элементами для обработки валидации. Вот сгенерированный 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:
Ok, так что я испытывал, и заметил, что если я продолжу свой код идентичны, за исключением я поменять Html.DropdownListFor
звонки с Html.TextboxFor
звонков затем проверки работ. Что может быть причиной этого? Может быть, это ошибка структуры с ненавязчивой проверкой?
UPDATE: Содержит Фикс
Таким образом, после публикации этого же вопроса на ASP.NET Forums, я был в состоянии получить решение. В сообщении вы сможете увидеть, что есть ошибка в ненавязчивой структуре проверки и как она обрабатывает проверку dropdownlists. Пользователь advsellorben неплохо справляется с объяснением проблемы, а также с решением (включая пример кода), которое поможет другим избежать этой проблемы в будущем или, по крайней мере, до тех пор, пока Microsoft не введет исправление в структуру.
Спасибо всем за помощь.
Есть ли у вас пример использования этого пользовательского помощника в представлении? Благодарю. – Brandon