2010-05-12 32 views
2

MVC.net 2默认情况下,输出的验证消息是这样的:MVC.net 2 - 更改由ValidationMessageFor输出的HTML - 可以通过模板下载吗?

<span id="UserName_validationMessage" class="field-validation-valid">A Validation message</span> 

我想它不喜欢这样写道:

<label id="UserName_validationMessage" class="field-validation-valid">A Validation message</label> 

有没有办法做到这一点,如显示和编辑模板?还是有另一种方法可以做到全球?

回答

3

生成该html的代码位于System.Web.Mvc中的ValidateExtensions.cs的内部。您可以更新代码以输出标签而不是跨度,然后重新编译该标签。代码如下所示:

 TagBuilder builder = new TagBuilder("span"); 
     builder.MergeAttributes(htmlAttributes); 
     builder.MergeAttribute("class", HtmlHelper.ValidationMessageCssClassName); 
     builder.SetInnerText(String.IsNullOrEmpty(validationMessage) ? GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext, modelError, modelState) : validationMessage); 

否则,您可能能够覆盖ValidationExtensions.ValidationSummary(此的HtmlHelper的HtmlHelper,字符串消息,IDictionary的htmlAttributes),并做到这样......

+0

修改一个积极发展的dll添加自己的自定义代码是一个糟糕的选择,因为它创造额外工作(并引入正常的行为)如果DLL是不断更新从官方消息。我仍然在寻找一种插入行为并覆盖它的全局方式,但是如果失败了,我只需创建一个自定义的html帮助器并输出自己的标记,方法是将System.Web.Mvc中的逻辑复制并自定义到我的自己的代码库。 – dshapiro 2016-07-26 18:54:22

0

我想这正是你要寻找的:

http://blog.syntaxc4.net/?p=711

+0

链接不回答问题。 – 2015-10-12 22:55:08

+0

不幸的是,应该出现在该页面的要点不再被嵌入(可能是因为嵌入要点的API更改)。这是一个很好的例子,为什么只有链接的答案是一个坏主意,内容应该被复制。阅读文章,这听起来像作家使用正则表达式来解决这个问题,所以我敢打赌,他创建了一个扩展,使用ValidationMessageFor的结果,它对html输出运行了一个正则表达式,并用标签替换了span ...其中,实际上,这不是OP要求的。 – dshapiro 2016-07-26 18:47:59

相关问题