获取viewmodel属性的modelstate键

时间:2015-06-04 12:43:10

标签: c# asp.net-mvc modelstate

我有一个添加产品表单,取决于用户之前添加的类别,产品类型等。而不是让他们完成表单,然后意识到他们无法提交它,我想在表单首次加载时显示错误。

我想将此错误添加到针对相应属性的modelstate中 - 所以我的问题是如何获取该属性的modelstate键名?

代码

    Model.Step1.PopulateData(_productTypeSvc.GetList(), _websiteSvc.GetMaximumNumberOfProductImages(HttpContext.Request.Url.Host));
    Model.Title = "Add A Product - Step 1: The Basics";
    if (Model.Step1.ProductTypes.IsNullOrEmpty())
    {
        //Rather than string.Empty, I want to programmatically get the correct key to add the error to..
        //E.g. if it were the view - HtmlHelper.NameFor(m => m.Step1.ProductTypeID)
        ModelState.AddModelError(string.Empty, "Please add at least one product type before adding products.");
    }

我知道我可以伪造HtmlHelper对象,但我宁愿避免这种情况,并想知道是否有更好的方法?

1 个答案:

答案 0 :(得分:1)

在MVC中找到适当的扩展名:

System.Web.Mvc.ExpressionHelper.GetExpressionText(LambdaExpression expression);

MSDN Here

无论如何,谢谢你们。

更新

public static string GetPropertyName<TModel, TValue>(this TModel model, Expression<Func<TModel, TValue>> propertySelector)
{
     return ExpressionHelper.GetExpressionText(propertySelector);
}

然后使用扩展名:

ModelState.AddModelError(Model.GetPropertyName(m => m.Step1.ProductTypeID), "Please add at least one product type before adding products.");