Ты уверен? У меня есть сайт ASP.NET MVC 2, настроенный, как вы описываете, и у меня есть проверка на стороне клиента как обязательных, так и основанных на регулярных выражениях атрибутов, которая работает нормально. На данный момент он не работает с моими собственными валидаторами (которые получены из ValidationAttribute):
[MetadataType(typeof(AlbumMetadata))]
public partial class Album {}
public class AlbumMetadata {
[Required(ErrorMessage = "You must supply a caption that is at least 3 characters long.")]
[MinLength(3, ErrorMessage = "The caption must be at least {0} characters long.")]
[RegularExpression(@".{3,}")]
public string Caption { get; set; }
}
(MinLength
в основном предоставляет более очевидный способ увидеть, что происходит в атрибуте регулярного выражения, который был добавлен для тестирования)
Тогда у меня будет следующее:
<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
<%= Html.ValidationSummary("Edit was unsuccessful. Please correct the errors and try again.") %>
<% Html.EnableClientValidation(); %>
<% using (Html.BeginForm()) {%>
<fieldset>
<legend>Album details</legend>
<div class="form_row">
<label for="Caption" class="left_label">Album caption:</label>
<%= Html.TextBox("Caption", Model.Caption, new { @class = "textbox" })%>
<%= Html.ValidationMessage("Caption", "*") %>
<div class="cleaner"> </div>
</div>
<div class="form_row">
<label for="IsPublic" class="left_label">Is this album public:</label>
<%= Html.CheckBox("IsPublic", Model.IsPublic) %>
</div>
<div class="form_row">
<input type="submit" value="Save" />
</div>
</fieldset>
<% } %>
Что приводит к тому, что клиент выводит следующее ниже тегов формы (отформатировано для ясности):
<script type="text/javascript">
//<![CDATA[
if (!window.mvcClientValidationMetadata)
{ window.mvcClientValidationMetadata = []; }
window.mvcClientValidationMetadata.push({
"Fields":[
{"FieldName":"Caption",
"ReplaceValidationMessageContents":false,
"ValidationMessageId":"Caption_validationMessage",
"ValidationRules":[
{"ErrorMessage":"You must supply a caption that is at least 3 characters long.",
"ValidationParameters":{},
"ValidationType":"required"},
{"ErrorMessage":"The field Caption must match the regular expression \u0027.{3,}\u0027.",
"ValidationParameters":{"pattern":".{3,}"},
"ValidationType":"regularExpression"}]
}],
"FormId":"form0","ReplaceValidationSummary":false});
//]]>
</script>