检查是一种特殊形式的字段有效 [英] Check is a specific form field is valid
问题描述
我一直在寻找了一段时间,并没有找到一个解决办法。
我是一个ASP.NET和MVC4 / Razor2新手,所以我主要是编辑默认的项目。
不管怎样,我的问题是,我使用Twitter的引导,我需要添加一个错误
在CSS类 DIV
如果下铺设领域是无效的。
到目前为止,我有这样的:
< DIV CLASS =控制组错误>
@ Html.LabelFor(M = GT; m.Password,新{@class =控制标签})
< DIV CLASS =控制>
@ Html.PasswordFor(M = GT; m.Password)
@ Html.ValidationMessageFor(M = GT; m.Password,空,新的{@class =直列帮助错误})
< / DIV>
< / DIV>
我应该怎么做才能让剃刀插入错误
类中的第一个 DIV
我的片段时,现场是无效的。
更新:我找到了一种方法来做到这一点,但它并不相较于code其余觉得不对劲。有没有更好的办法或者是它的的的方式做到这一点?
< DIV CLASS =控制组@(!(ViewData.ModelState.IsValidField(密码))?错误:),>
这样的:
公共静态类HtmlHelperExtensions
{
公共静态MvcHtmlString AddClassIfPropertyInError<的TModel,TProperty>(
这与的HtmlHelper LT;的TModel>的HtmlHelper,
防爆pression<&Func键LT;的TModel,TProperty>>前pression,
串errorClassName)
{
VAR前pressionText =前pressionHelper.GetEx pressionText(如pression);
VAR fullHtmlFieldName = htmlHelper.ViewContext.ViewData
.TemplateInfo.GetFullHtmlFieldName(如pressionText);
VAR状态= htmlHelper.ViewData.ModelState [fullHtmlFieldName]
如果(状态== NULL)
{
返回MvcHtmlString.Empty;
} 如果(state.Errors.Count == 0)
{
返回MvcHtmlString.Empty;
} 返回新MvcHtmlString(errorClassName);
}
}
然后在您的视图:
< DIV CLASS =控制组@ Html.AddClassIfPropertyInError(X => x.Email,错误)>
<标签类=控制标签>电子邮件和LT; /标签>
< DIV CLASS =控制>
<输入类型=文本占位符=电子邮件NAME =电子邮件/>
<跨度类=求助在线> @ Html.ValidationMessageFor(X => x.Email)LT; / SPAN>
< / DIV>
< / DIV>
I've been searching for a while now and haven't found a solution yet.
I'm an ASP.NET and MVC4/Razor2 newbie, so I'm mostly editing the default project.
Anyway, my issue is that I'm using Twitter Bootstrap and I need to add an error
CSS class on a div
if the under-laying field is not valid.
So far I have this:
<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>
What should I do to make Razor insert the error
class in the first div
of my snippet when the field is invalid.
UPDATE: I found a way to do it, but it doesn't feel right in comparison to the rest of the code. Is there a better way or is it the way to do it?
<div class="control-group@((!ViewData.ModelState.IsValidField("Password")) ? " error" : "")">
Like this:
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);
}
}
Then in your view:
<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>
这篇关于检查是一种特殊形式的字段有效的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!