MVC2 ValidationMessage в template.master не отображается - PullRequest
1 голос
/ 20 июля 2010

Я реализовал метод template.master, описанный Брэдом Уилсоном в этой публикации , но я изменил строку 31 его EditorTemplates / Template.master с:

<%= Html.ValidationMessage("", "*") %>

на:

<%= Html.ValidationMessage(ViewData.ModelMetadata.PropertyName)%>

, чтобы фактический текст проверки отображался рядом с элементами управления. Это ничего не делает .Если я перемещу ту же строку в файл object.ascx, он будет отрисован, хотя и не в нужном месте макета.Что-то с жизненным циклом метаданных не заполняется в данный момент?

ОБНОВЛЕНИЕ

У меня есть это в моем object.ascx, и оно работает.

   <%= Html.Editor(prop.PropertyName)%>
   <p>
       <%=Html.ValidationMessage(prop.PropertyName)%>
   </p>

UPDATE2

Это работает в шаблоне:

 <%= Html.ValidationMessage("")%>

Я считаю, что область действия шаблона находится на уровне управления, а не на уровне модели представления,поэтому в "" он просто использует всю модель управления, а не ищет свойство из модели представления.

Ответы [ 2 ]

0 голосов
/ 26 июля 2010

Это работает в шаблоне:

 <%= Html.ValidationMessage("")%> 

Я полагаю, что область действия шаблона находится на уровне управления, а не на уровне модели представления, поэтому в "" он просто использует всю модель управления, а нечем поиск недвижимости из viewmodel.

0 голосов
/ 20 июля 2010

Что-то должно отсутствовать в вашем состоянии модели, или вы изменили ключ, чтобы он не являлся именем свойства.

Мясной код для ValidationMessage (что угодно) довольно прост:

 private static MvcHtmlString ValidationMessageHelper(this HtmlHelper htmlHelper, ModelMetadata modelMetadata, string expression, string validationMessage, IDictionary<string, object> htmlAttributes) {
        string modelName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(expression);
        FormContext formContext = htmlHelper.ViewContext.GetFormContextForClientValidation();

        if (!htmlHelper.ViewData.ModelState.ContainsKey(modelName) && formContext == null) {
            return null;
        }

        ModelState modelState = htmlHelper.ViewData.ModelState[modelName];
        ModelErrorCollection modelErrors = (modelState == null) ? null : modelState.Errors;
        ModelError modelError = ((modelErrors == null) || (modelErrors.Count == 0)) ? null : modelErrors[0];

        if (modelError == null && formContext == null) {
            return null;
        }

Единственная другая проблема, если каким-то образом вы очистили свое сообщение проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...