wii*_*ill 9 c# validation asp.net-mvc razor
我一直在寻找一段时间,但尚未找到解决方案.
我是一个ASP.NET和MVC4/Razor2新手,所以我主要编辑默认项目.
无论如何,我的问题是我正在使用Twitter Bootstrap,如果底层字段无效,我需要error在a上添加一个CSS类div.
到目前为止我有这个:
<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>
Run Code Online (Sandbox Code Playgroud)
当字段无效时,我该怎么做才能让Razor error在div我的代码片段的第一个插入类.
更新:我找到了一种方法,但与其他代码相比,它感觉不对.有没有更好的方法或者是这样做的方式?
<div class="control-group@((!ViewData.ModelState.IsValidField("Password")) ? " error" : "")">
Run Code Online (Sandbox Code Playgroud)
像这样:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在你看来:
<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>
Run Code Online (Sandbox Code Playgroud)
小智 6
除了Loki所说的,我还遇到了一个漂亮而整洁的解决方案,可以使用ModelState类并检索特定信息来实现我想要的每个验证逻辑:
假设您要检查模型中类的验证,名为"InnerClass",并且字段为"Name":
if (ModelState["InnerClass.Name"].Errors.Count > 0)
{
foreach (var error in ModelState["InnerClass.Name"].Errors)
{
message = error.ErrorMessage;
isValidFlag = false;
}
}
Run Code Online (Sandbox Code Playgroud)
除了上述条件,您还可以使用它:
ModelState.IsValidField("InnerClass.Name")
Run Code Online (Sandbox Code Playgroud)
ModelState类有很好的方法来检索验证信息,因此通过使用上述方法,您可以通过一些解决方法从中获得更多信息.
希望它能帮到你!
| 归档时间: |
|
| 查看次数: |
7456 次 |
| 最近记录: |