1

有没有办法检查给定对象在 ASP.NET MVC 4 中是否有错误。

就像是

    @Html.PasswordFor(model => model.Username, new { placeholder = Html.DisplayFor(model => model.Username) })
    @if(Html.ErrorFor(model => model.Username)) {
    <small class="error">@Html.ValidationMessageFor(model => model.Username)</small>
}

更新: 它不是整个模型,而是我需要检查的给定元素,所以 f.eks。do mode.Username有错误!

4

2 回答 2

2

我通过创建 2 个方法解决了这个问题。

    public static bool HasErrorFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
    {
        if (expression == null)
            throw new ArgumentNullException("expression");

        string modelName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(ExpressionHelper.GetExpressionText(expression));
        if (!htmlHelper.ViewData.ModelState.ContainsKey(modelName))
            return false;

        ModelState modelState = htmlHelper.ViewData.ModelState[modelName];
        return modelState.Errors.Count > 0;
    }
    public static MvcHtmlString GetErrorMessageFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
    {
        if (expression == null)
            throw new ArgumentNullException("expression");

        string modelName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(ExpressionHelper.GetExpressionText(expression));
        if (!htmlHelper.ViewData.ModelState.ContainsKey(modelName))
            return new MvcHtmlString(null);

        ModelState modelState = htmlHelper.ViewData.ModelState[modelName];
        if (modelState.Errors.Count > 0)
        {
            return new MvcHtmlString(modelState.Errors.FirstOrDefault().ErrorMessage);
        }

        return new MvcHtmlString(null);
    }

以及如何使用它

<div class="row">
    <div class="six columns">
        @Html.TextBoxFor(model => model.Username, new { placeholder = Html.GetDisplayFor(model => model.Username) })
        @if (Html.HasErrorFor(model => model.Username))
        {
        <small class="error">@Html.GetErrorMessageFor(model => model.Username)</small>
        }
    </div>
</div>
于 2013-02-04T19:44:50.250 回答
0

使用ModeState.IsValid属性检查模型的有效性

if(ModelState.IsValid)
{
 //DO update/insertion/deletion
}
else
{
 // return your view
}

显示错误。阅读这篇文章以获取有关 ModelState 错误显示的更多信息

var errors = ModelState
    .Where(x => x.Value.Errors.Count > 0)
    .Select(x => new { x.Key, x.Value.Errors })
    .ToArray();

对于特定属性尝试这样ModelState["yourProperty"]。获取包含模型状态和模型绑定验证状态的模型状态字典对象。

        if (ModelState["yourProperty"].Errors.Count >0) //then error
于 2013-02-04T16:40:49.303 回答