在ASP.NET MVC4中为Html.ValidationMessageFor指定默认消息

时间:2013-05-26 00:23:07

标签: asp.net-mvc-4 razor

我想在最初显示(GET)时在表单中的文本框旁边显示一个星号(*) 此外,我想在出现错误时使用相同的GET / POST视图)所以对于GET请求 我传入了一个空模型,如 return View(new Person());

稍后,当提交表单(POST)时,我使用数据注释,检查模型状态和 显示错误(如果有) Html.ValidationMessageFor(v => v.FirstName)

对于GET请求,模型状态有效且没有消息,因此不显示星号。 我试图通过检查请求类型并打印星号来解决此问题。 @(HttpContext.Current.Request.HttpMethod ==“GET”?“*”:Html.ValidationMessageFor(v => v.FirstName).ToString())

问题是Html.ValidationMessageFor(v => v.FirstName).ToString()已经编码 我想从Html.ValidationMessageFor(v => v.FirstName)获取原始html

或者可能有更好的方法。  1.如何显示默认的有用消息(表单字段旁边) - 例如“请输入nnn.nnn.nnn.nnn格式的IP地址”,以获取GET请求,然后显示错误(如果有的话)?  2.从剃刀角度检查if条件并编写字符串或MvcHtmlString

的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

继我上次评论之后,我将如何创建要使用的帮助程序:

    public static class HtmlValidationExtensions
    {
        public static MvcHtmlString ValidationMessageForCustom<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, string customString)
        {
           var returnedString = HttpContext.Current.Request.HttpMethod == "GET" ? customString : helper.ValidationMessageFor(expression).ToString();

           return MvcHtmlString.Create(returnedString);
        }
    }

它将像@Html.ValidationMessageForCustom(v=> v.FirstName, "Please enter IP address in the nnn.nnn.nnn.nnn format")

一样使用