【问题标题】:Specifyng a default message for Html.ValidationMessageFor in ASP.NET MVC4在 ASP.NET MVC 4 中为 Html.ValidationMessageFor 指定默认消息
【发布时间】:2013-05-26 00:23:07
【问题描述】:

我想在最初显示 (GET) 时在表单中的文本框旁边显示一个星号 (*) 我还想在出现错误时对 GET/POST 使用相同的视图)所以对于 GET 请求 我传入一个空模型,例如 返回视图(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)

或者这里可能有更好的方法。 1. 您如何为 GET 请求显示默认的有用消息(在表单字段旁边) - 例如“请以 nnn.nnn.nnn.nnn 格式输入 IP 地址),然后在帖子中显示错误(如果有)? 2. 从剃刀的角度来看,检查 if 条件并编写字符串或 MvcHtmlString 的最佳方法是什么

【问题讨论】:

  • 您是否尝试过创建自己的自定义 HTML 帮助程序,使用新的 ValidationForMessageCustom HTML 帮助程序扩展来覆盖 ValidationMessageFor 的行为,该扩展程序本身在呈现到屏幕时会检查当前请求上下文并打印适当的消息?在帮助器中使其更具可扩展性,您可以传递为获取请求打印的字符串,例如“请以格式输入 IP...”

标签: asp.net-mvc-4 razor


【解决方案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=&gt; v.FirstName, "Please enter IP address in the nnn.nnn.nnn.nnn format")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多