1

我想在最初显示(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. 您如何为 GET 请求显示默认的有用信息(在表单字段旁边) - 例如“请以 nnn.nnn.nnn.nnn 格式输入 IP 地址),然后在帖子中显示错误(如果有)? 2.从剃刀的角度来看,检查 if 条件并编写字符串或 MvcHtmlString 的最佳方法是什么

4

1 回答 1

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")

于 2013-05-26T13:01:53.153 回答