滚你自己ValidationMessage助手来解析图像标记可能是你最好的选择...内置的助手将呈现一个标签,如
<span class="field-validation-error">You must specify a username.</span>
,所以如果你不打算改变这一你留给CSS和/或jQuery技巧来做这个肮脏的工作。
我不知道一个纯用的,如果CSS做你的工作,但如果你能处理一个DIV标签中有你的错误消息跨度,你可以尝试这样的:
.field-validation-error
{
background: url(x.gif) no-repeat;
padding-left:10px;
color: #ff0000;
}
<div style="width:10px; height:10px; overflow:hidden;">
<%= Html.ValidationMessage("username") %>
</div>
对于10x10 gif,这将隐藏文本,但它将位于块元素中,并且没有错误消息标题/“tooltip”。不完全是最好的解决方案。我会检查MVC源代码中的ValidationMessage方法的代码,并考虑根据需要调整自己的代码以完全呈现它,或者再次使用JavaScript来做这个诡计。
编辑:为了好玩,我决定从MVC源代码开始测试我自己的验证消息帮助器。它很脏(硬编码的图像路径),但是一个有效的例子。在这种情况下,它需要你传递验证消息 - 我省略了一些代码,它可以选择显示默认的内置消息。
public static string MyValidationMessage(this HtmlHelper htmlHelper, string modelName, string validationMessage)
{
if (modelName == null)
throw new ArgumentNullException("modelName");
if (!htmlHelper.ViewData.ModelState.ContainsKey(modelName))
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)
return null;
return "<img src=\"../../Content/x.gif\" alt=\"Error\" title=\"" + validationMessage + "\" />";
}
这应该是一个静态方法。 – 2009-08-12 12:58:25
你是对的,编辑。谢谢。 – Jimmeh 2009-08-12 13:07:04