Как мне получить ЗНАЧЕНИЕ свойства объекта, которое передается моему настраиваемому EditorFor из представления?

System.Web.Mvc имеет HtmlHelper, который содержит метод под названием EditorFor, который отображает элемент управления редактированием, связанный с типом данных в представлении.

Я пытаюсь создать свой собственный метод EditorFor, расширяя ASP.NET MVC 2 HtmlHelper. Имею следующее:

    public static string EditorForNew<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> item)
    {
        string value = "";
        string name = item.ToString(); // THIS IS CORRECTED IN MY COMMENT TO THE ANSWER BELOW!
        Type type = typeof(TProperty);

        if (type == typeof(int) || type == typeof(int?) || type == typeof(double) || type == typeof(double?) || type == typeof(decimal) || type == typeof(decimal?) || type == typeof(float) || type == typeof(float?))
        {
            return helper.TextBox(name, value, new { @class = "number" }).ToString();
        }
        else
        {
            return helper.TextBox(name, value).ToString();
        }
    }

Может ли кто-нибудь объяснить, как я получаю ЗНАЧЕНИЕ свойства объекта, которое передается этому из представления?


person Jimbo    schedule 27.06.2012    source источник


Ответы (1)


Вам необходимо использовать ModelMetadata:

ModelMetadata metadata = ModelMetadata.FromLambdaExpression(item, helper.ViewData);

Затем вы можете получить значение из свойства metadata.Model.

person SLaks    schedule 27.06.2012
comment
Спасибо! Также заметил, что этот ModelMetadata также содержит правильное значение PropertyName, то есть имя свойства модели для создаваемого входного элемента. - person Jimbo; 27.06.2012