Получить ключ modelstate для свойства viewmodel


У меня есть форма добавления продукта, которая зависит от пользователя, добавившего категории, типы продуктов и т. д. ранее. Вместо того, чтобы позволить им заполнить форму, а затем понять, что они не могут ее отправить, я хочу показать ошибку при первой загрузке формы.

Я хочу добавить эту ошибку в 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 2

1 ответ:

Нашел подходящее расширение в MVC:

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

MSDN здесь .

Все равно спасибо, ребята.

Обновление:

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.");