c# - 检查特定表单字段是否有效

标签 c# asp.net-mvc razor validation

我已经搜索了一段时间,但还没有找到解决方案。

我是 ASP.NET 和 MVC4/Razor2 新手,所以我主要编辑默认项目。

无论如何,我的问题是我正在使用 Twitter Bootstrap,如果底层字段无效,我需要在 div 上添加一个 error CSS 类.

到目前为止我有这个:

    <div class="control-group error">
      @Html.LabelFor(m => m.Password, new { @class = "control-label" })
      <div class="controls">
        @Html.PasswordFor(m => m.Password)
        @Html.ValidationMessageFor(m => m.Password, null, new { @class = "inline-help error" })
      </div>
    </div>

当字段无效时,我应该怎么做才能让 Razor 在代码段的第一个 div 中插入 error 类。

更新:我找到了一种方法,但与其余代码相比感觉不对。是否有更好的方法或者它是的方法?

<div class="control-group@((!ViewData.ModelState.IsValidField("Password")) ? " error" : "")">

最佳答案

像这样:

public static class HtmlHelperExtensions
{
    public static MvcHtmlString AddClassIfPropertyInError<TModel, TProperty>(
        this HtmlHelper<TModel> htmlHelper, 
        Expression<Func<TModel, TProperty>> expression, 
        string errorClassName)
    {
        var expressionText = ExpressionHelper.GetExpressionText(expression);
        var fullHtmlFieldName = htmlHelper.ViewContext.ViewData
            .TemplateInfo.GetFullHtmlFieldName(expressionText);
        var state = htmlHelper.ViewData.ModelState[fullHtmlFieldName];
        if (state == null)
        {
            return MvcHtmlString.Empty;
        }

        if (state.Errors.Count == 0)
        {
            return MvcHtmlString.Empty;
        }

        return new MvcHtmlString(errorClassName);
    }
}

那么在你看来:

<div class="control-group @Html.AddClassIfPropertyInError(x => x.Email, "error")">
    <label class="control-label">Email</label>
    <div class="controls">
        <input type="text" placeholder="Email" name="Email" />
        <span class="help-inline">@Html.ValidationMessageFor(x => x.Email)</span>
    </div>
</div>

关于c# - 检查特定表单字段是否有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14323212/

相关文章:

C# 将两个列表合并为一个列表,如 Enumerable.ConvertAll

javascript - 图像上传到 Summernote 编辑器中的文件夹

c# - 部分 View 错误 mvc 需要 IEnumerable 类型的模型项

asp.net-mvc - Razor 语法中 '@' 的术语是什么?

asp.net-mvc - IIS 7.5 MVC 需要身份验证才能获取静态文件

javascript - 如何在 View 中使用KeyValue对结构

c# - 如何从以特定方式格式化的字符串之间访问特定值c#

c# - C# 接口(interface)的隐式和显式实现之间的区别

c# - Mvc 应用程序异步方法挂起

Javascript MVC 在空格后删除