Clinetside регулярное выражение проверки в MVC4

У меня есть модель с парой регулярных выражений по свойствам, как показано ниже:

Представление является динамическим, и я загружаю его содержимое из jquery, как показано ниже:

ОБНОВЛЕНИЕ: я нашел проблему, но не решение. Атрибуты на стороне клиента регулярного выражения не отображаются, потому что я использую [UIHint("TextBox")] для добавления некоторых пользовательских классов и сценариев. Если я удаляю UIHInt, все атрибуты проверки генерируются без каких-либо проблем. Если я добавлю UIHInt, то ничего не генерируется.

Не уверен, что не так в моем шаблоне редактора UIHInt. Посоветуйте, пожалуйста???

EditorTemplate / TextBox.cshtml

@Html.TextBoxFor(m => Model, new {@class="txt"})

моя модель:

public partial class PartyRole
{
    [UIHint("TextBox")]
    [RegularExpression(@"^.{5,}$", ErrorMessage="Minimum 5 characters required")]
    [StringLength(50, ErrorMessage="Maximum {2} characters exceeded")]
    public string Title { get; set; }
}

JQuery ненавязчивый входит в мои комплекты как:

bundles.Add(new ScriptBundle("~/js/jqueryval").Include(
                    "~/Scripts/jquery.unobtrusive*",
                    "~/Scripts/jquery.validate*"));

Посмотреть:

@model dynamic

@using (Html.BeginForm("Edit", null, FormMethod.Post, new { id="FrmIndex" }))
{
@Html.ValidationSummary(true);
@Html.EditorForModel()

 <input type="submit" value="Edit" />
}
<script>
$(".datetime").datetime();
$(".combo").combo();
$(".chk").chk();

var form = $("#FrmIndex")
          .removeData("validator") /* added by the raw jquery.validate plugin */
          .removeData("unobtrusiveValidation");  /* added by the jquery unobtrusive plugin */
$.validator.unobtrusive.parse(form);

</script>

Но все же проверки не генерируются на стороне клиента. Сообщение генерируется со стороны сервера.

ОБНОВЛЕНИЕ: есть некоторый прорыв. Эти проверки работают нормально в моих строго типизированных представлениях. Однако не в моем динамическом представлении, которое я сейчас показываю здесь.

Может кто-нибудь посоветовать, что я здесь не так делаю?

1 ответ

Решение

В своем пользовательском шаблоне редактора вы должны заставить помощника думать, что он находится внутри FormContext, чтобы он испускал атрибуты data- * HTML5 в поле ввода, которые используются ненавязчивой проверкой. Таким образом, в вашем шаблоне вставьте следующее, и вы готовы пойти:

@{
    this.ViewContext.FormContext = new FormContext();
}

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class="txt" })
Другие вопросы по тегам