Was ist die einfachste Methode, um den Eigenschaftswert aus einem übergebenen Lambda-Ausdruck in einer Erweiterungsmethode für HtmlHelper abzurufen?

Ich schreibe eine schmutzige kleine Erweiterungsmethode für HtmlHelper, damit ich etwas wie HtmlHelper.WysiwygFor (Lambda) sagen und den CKEditor anzeigen kann.

Ich habe dies derzeit arbeiten, aber es scheint ein bisschen umständlicher als ich es vorziehen würde. Ich hoffe, dass es einen einfacheren Weg gibt, dies zu tun.

Hier ist was ich bisher habe.

public static MvcHtmlString WysiwygFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
{
    return MvcHtmlString.Create(string.Concat("<textarea class=\"ckeditor\" cols=\"80\" id=\"",
                                        expression.MemberName(), "\" name=\"editor1\" rows=\"10\">", 
                                        GetValue(helper, expression),
                                        "</textarea>"));
}

private static string GetValue<TModel, TProperty>(HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
{
    MemberExpression body = (MemberExpression)expression.Body;
    string propertyName = body.Member.Name;
    TModel model = helper.ViewData.Model;
    string value = typeof(TModel).GetProperty(propertyName).GetValue(model, null).ToString();
    return value;
}

private static string MemberName<T, V>(this Expression<Func<T, V>> expression)
{
    var memberExpression = expression.Body as MemberExpression;
    if (memberExpression == null)
            throw new InvalidOperationException("Expression must be a member expression");

    return memberExpression.Member.Name;
}

Vielen Dank

Antworten auf die Frage(12)

Ihre Antwort auf die Frage