Html.ValidationMessageFor в частичном представлении (ASP.NET MVC3)

В настоящее время у меня есть частичное представление с текстовым полем и ValidationMessageFor. Это работает нормально, и сообщение отображается, как и ожидалось, когда ввод недействителен. Я делаю небольшой рефакторинг HTML и хочу поднять validationMessageFor до представления, которое в настоящее время содержит частичное представление. У меня почти все работает правильно, но есть пара загвоздок.

@Html.ValidationMessageFor(m => m.Mileage, string.Empty, new { id = "spanMileageError", @class = "mileageErrorSpanClass" }) 

Моделью для этого вида является автомобильный объект. Модель для partialView — это немного другой объект.

@Html.TextBoxFor(v => v.Vehicle.Mileage, new { placeHolder = mileagePlaceHolderText, id = Model.TextBoxId, maxlength = "7", @class="mileageTextBoxClass" })       

Эта конфигурация дает имя текстовому полю ("Vehicle.Mileage"), но атрибут проверки ("data-valmsg-for") равен "Mileage", а не "Vehicle.Mileage".

Как я могу исправить помощник ValidationMessageFor, чтобы он выдавал правильный HTML, чтобы эта проверка работала?

Вот визуализированный HTML-код текущего представления до рефакторинга HTML.

<input type="text" value="" placeholder="Enter Mileage" name="Vehicle.Mileage"     maxlength="7" id="textBoxMileage" data-val-range-min="1" data-val-range-max="999999" data-    val-range="Mileage must be a valid number between 1 and 999,999." data-val-number="The     field Mileage must be a number." data-val="true" class="mileageTextBoxClass input-    validation-error" autocomplete="off">

<span id="spanMileageError" data-valmsg-replace="true" data-valmsg-for="Vehicle.Mileage" class="mileageErrorSpanClass field-validation-error"><span htmlfor="textBoxMileage" generated="true" class="">Mileage must be a valid number between 1 and 999,999.</span></span>

А вот HTML после рефакторинга

<input type="text" value="" placeholder="Enter Mileage" name="Vehicle.Mileage" maxlength="7" id="textBoxMileage" data-val-range-min="1" data-val-range-max="999999" data-val-range="Mileage must be a valid number between 1 and 999,999." data-val-number="The field Mileage must be a number." data-val="true" class="mileageTextBoxClass placeholder" autocomplete="off">
<span id="spanMileageError" data-valmsg-replace="true" data-valmsg-for="Mileage" class="field-validation-valid mileageErrorSpanClass"></span>

Обратите внимание, что в span отсутствует внутренний элемент span, который раньше присутствовал. Может ли кто-нибудь помочь мне исправить проблему здесь?

Спасибо за любые советы и рекомендации или возможные решения. С уважением,
~ck в Сан-Диего


person Hcabnettek    schedule 17.02.2011    source источник


Ответы (2)


Вместо этого вы можете просто использовать Html.TextBox()

@Html.TextBox("Mileage", Model.Vehicle.Mileage, new { placeHolder = mileagePlaceHolderText, id = Model.TextBoxId, maxlength = "7", @class="mileageTextBoxClass" })
person David Glenn    schedule 18.02.2011

Я немного новичок в MVC, но почему бы не использовать ту же модель? Так:

@model ProjectNamespace.Models.Vehicle

или вот так:

@using ProjectNamespace.Models.Vehicle

Я думаю, вы могли бы достичь желаемых результатов.

person Davidson Sousa    schedule 17.02.2011
comment
Использование точно не сработает. использование предназначено для пространств имен, а Vehicle - это модель/класс. - person Rap; 03.05.2013