我已经搜索了一段时间,但还没有找到解决方案。
我是 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/