2013-09-20 4 views
0

Validation рендеринг вопросmvc4 проблема проверки бритвы рендеринга

У меня есть в моей модели эти данные аннотации:

[Required(ErrorMessage = "Adres is een verplicht veld")] 
    [MaxLength(250)] 
    public string D_Address { get; set; } 

    [Required(ErrorMessage = "Huisnummer is verplicht")] 
    public int D_AddressNumber { get; set; } 

    public string D_AddressExtra { get; set; } 

    [Required] 
    public int CapacityRate { get; set; } 

    [Required(ErrorMessage = "Postcode is een verplicht veld")] 
    [MaxLength(35)] 
    public string D_Zipcode { get; set; } 

    [Required(ErrorMessage = "Plaats is een verpicht veld")] 
    [MaxLength(250)] 
    public string D_City { get; set; } 

в моем cshtml:

@using (Html.BeginForm()) 
{ 
    @Html.TextBoxFor(m => m.D_Address, new { @class = "span6" }) 
    @Html.TextBoxFor(m => m.D_AddressNumber, new { @class = "span2" }) 
    @Html.TextBoxFor(m => m.D_AddressExtra, new { @class = "span2" }) 
    <br /> 
    @Html.ValidationMessageFor(m => m.D_Address, null, new { @class = "label label-important" }) 
    @Html.ValidationMessageFor(m => m.D_AddressNumber, null, new { @class = "label label-important" }) 
    <br /> 
    @Html.TextBoxFor(m => m.D_Zipcode, new { @class = "span4" }) 
    @Html.ValidationMessageFor(m => m.D_Zipcode, null, new { @class = "label label-important" }) 
    <br /> 
    @Html.TextBoxFor(m => m.D_City, new { @class = "span4" }) 
    @Html.ValidationMessageFor(m => m.D_City, null, new { @class = "label label-important" }) 
    <br /> 
    <input id="Submit1" type="submit" value="Versturen" class="btn btn-primary" /> 
    <br /> 
    @Html.ValidationSummary(); 
} 

на моей локальной машине он делает, как:

<form action="/validatie/quoterequest" method="post"> 

<input class="span6" data-val="true" data-val-required="Adres is een verplicht veld"  id="D_Address" name="D_Address" type="text" value="" /> 

<input class="span2" data-val="true" data-val-number="The field D_AddressNumber must be a number." data-val-required="Huisnummer is verplicht" id="D_AddressNumber" name="D_AddressNumber" type="text" value="" /> 

<input class="span2" id="D_AddressExtra" name="D_AddressExtra" type="text" value="" /><br /> 
<span class="field-validation-valid label label-important" data-valmsg-for="D_Address" data-valmsg-replace="true"></span><span class="field-validation-valid label label-important" data-valmsg-for="D_AddressNumber" data-valmsg-replace="true"></span> <br /> 

<input class="span4" data-val="true" data-val-required="Postcode is een verplicht veld" id="D_Zipcode" name="D_Zipcode" type="text" value="" /><span class="field-validation-valid label label-important" data-valmsg-for="D_Zipcode" data-valmsg-replace="true"></span> <br /> 
<input class="span4" data-val="true" data-val-required="Plaats is een verpicht veld" id="D_City" name="D_City" type="text" value="" /><span class="field-validation-valid label label-important" data-valmsg-for="D_City" data-valmsg-replace="true"></span> <br /> 

<input id="Submit1" type="submit" value="Versturen" class="btn btn-primary" /><br /> 
<div class="validation-summary-valid" data-valmsg-summary="true"><ul> 
<li style="display:none"></li> 
</ul></div> 

</form> 

на моем сервере:

<form action="/Validatie/Quoterequest" method="post"> 

<input class="span6" id="D_Address" name="D_Address" type="text" value="" /> 

<input class="span2" data-val="true" data-val-number="The field D_AddressNumber must be a number." data-val-required="Huisnummer is verplicht" id="D_AddressNumber" name="D_AddressNumber" type="text" value="" /> 

<input class="span2" id="D_AddressExtra" name="D_AddressExtra" type="text" value="" /> <br /> <span class="field-validation-valid label label-important" data-valmsg-for="D_Address" data-valmsg-replace="true"></span><span class="field-validation-valid label label-important" data-valmsg-for="D_AddressNumber" data-valmsg-replace="true"></span> <br /> 

<input class="span4" id="D_Zipcode" name="D_Zipcode" type="text" value="" /><span class="field-validation-valid label label-important" data-valmsg-for="D_Zipcode" data-valmsg-replace="true"></span> <br /> 

<input class="span4" id="D_City" name="D_City" type="text" value="" /><span class="field-validation-valid label label-important" data-valmsg-for="D_City" data-valmsg-replace="true"></span> <br />  

<input id="Submit1" type="submit" value="Versturen" class="btn btn-primary" />  <br /> 
<div class="validation-summary-valid" data-valmsg-summary="true"><ul><li style="display:none"></li> </ul></div> 

</form> 

У меня также есть эта информация Локальная машина IISVersion: C:\Windows\Microsoft.NET\Framework\v4.0.30319\

ProcesVersionInfo : File: C:\Program Files (x86)\IIS Express\iisexpress.exe InternalName: iisexpress.exe 
OriginalFilename: iisexpress.exe.mui 
FileVersion: 8.0.8418.0 (winmain(eokim).120521-1311) 



FileDescription: IIS Express Worker Process 
Product: Internet Information Services 
ProductVersion: 8.0.8418.0 
Debug: False 
Patched: False 
PreRelease: False 
PrivateBuild: True 
SpecialBuild: False 
Language: Language Neutral 

На сервере: IISVersion : C:\Windows\Microsoft.NET\Framework\v4.0.30319\

ProcesVersionInfo : File: C:\Windows\SysWOW64\inetsrv\w3wp.exe 
InternalName: w3wp.exe OriginalFilename: w3wp.exe.mui 
FileVersion: 7.5.7600.16385 (win7_rtm.090713-1255) 
FileDescription: IIS Worker Process Product: Internet Information Services ProductVersion: 7.5.7600.16385 
Debug: False 
Patched: False 
PreRelease: False 
PrivateBuild: False 
SpecialBuild: False 
Language: Taalonafhankelijk 

ответ

0

я испытал подобные симптомы в Windows7 x64 MVC 4 в VS2010. Код не отображал атрибуты data-val даже в простых формах.

Я решил это!

Для отладки сначала попробуйте создать строго типизированный вид «Редактировать», используя вашу модель, и пункт «Добавить»> «Вид». Проверьте, отображаются ли свойства, которые вы ожидаете, в создаваемом представлении. Если нет, и, как и я, вы обнаружите, что никакие поля не добавляются автоматически, ваша проблема - определение модели.

Вы, наверное, есть что-то вроде ...

public class MyModel 
{ 
    [Required(ErrorMessage = "or else!")] 

    public string My_Broken_DataValEmittingProperty; 
} 

Вам нужно изменить, чтобы быть:

public class MyModel 
{ 
    [Required(ErrorMessage = "or else!")] 

    public string My_Working_DataValEmittingProperty { get; set; } 
} 

Теперь пересобрать РЕШЕНИЕ и попробуйте добавить> Просмотр снова. Помните, что это работает с использованием Reflection, поэтому ему необходимо скомпилировать его в DLL. Если это сработает, вы также обнаружите, что теперь получаете атрибуты data-val из методов EditorFor.

Учитывая, что вы копируете библиотеки DLL в серверную среду, действительно ли ваш исходный код представляет собой скомпилированные библиотеки DLL, которые, по вашему мнению, вы развертываете? Я бы перекомпилировал обе версии Debug и Release, протестировал их как локально, так и скопировал версии релиза на сервер.

-

Несмотря на это, процесс, который я прошел через, может помочь вам отлаживать дальше.

Первоначально предполагалось, что это была версия jQuery для версии или событие, поэтому были сделаны следующие модификации и проверки:
1) web.config - и ClientVlidationEnabled, и UnobtrusiveJavascriptEnabled - true.
2) Эти атрибуты находятся в правильной сети.конфигурационный файл - внешний один
3) Упростить вид избегать использования пучков в целом - пучки могут изменить порядок файлов
4) загрубленных Jquery до версии по умолчанию, поставляются с MVC4
5) упрощённых формами, чтобы избежать использования партиалов - частичным элементам может отсутствовать formContext, который вызывает ту же проблему. 0) Явно ссылаются на jQuery, jQuery.validate и jQuery.validate.unobtrusive в этом порядке в файле _Layout.cshtml.
7) Проверено визуализировано HTML в FireBug и не полагается на источник просмотра в браузере
Мой проект - это MVC3-обновление до MVC4, поэтому я импортировал все пользовательские файлы в проект MVC4, чтобы убедиться, что я ничего не пропустил , Я убежден, что ответ заключается в том, чтобы выделить, почему атрибуты data-val не отображаются дизайном в методах EditorFor. Комментарии коментариев:

// Only render attributes if unobtrusive client-side validation is enabled, and then 
// only if we've never rendered validation for a field with this name in this form. 
// Also, if there's no form context, then we can't render the attributes (we'd have no 
// <form> to attach them to). 

Помните, что это вспомогательные методы. Таким образом, вы можете вручную ввести вывод метода «помощник» в представление и сэкономить много времени.

Удачи!

Смежные вопросы