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 に答える