代码之家  ›  专栏  ›  技术社区  ›  CodeGrue

template.master中的MVC2验证消息未呈现

  •  1
  • CodeGrue  · 技术社区  · 14 年前

    我实现了BradWilson在 this posting 但我把他的editorTemplates/template.master的第31行改为:

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

    到:

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

    以便在控件旁边显示实际的验证文本。 这不会造成任何效果 . 如果我将同一行移动到object.ascx文件中,它将呈现,尽管它不在布局中的正确位置。元数据生命周期的某些内容此时是否未填充?

    更新

    我的object.ascx中有这个,它起作用了。

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

    更新2

    这在模板中有效:

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

    我相信模板的作用域在控件级别,而不是ViewModel级别,因此“”只使用整个控件模型,而不是从ViewModel中搜索属性。

    2 回复  |  直到 14 年前
        1
  •  0
  •   John Farrell    14 年前

    模型状态中必须缺少某些内容,或者您已将该键从属性名更改为属性名。

    validationmessage(anything)的详细代码非常简单:

     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;
            }
    

    另一个问题是,如果您以某种方式清除了validationmessage。

        2
  •  0
  •   CodeGrue    14 年前

    这在模板中有效:

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

    我相信模板的作用域在控件级别,而不是ViewModel级别,因此“”只使用整个控件模型,而不是从ViewModel中搜索属性。