HtmlHelper.WysiwygFor (lambda) gibi bir şey söyleyebilirim ve CKEditor'ı görüntülemek için HtmlHelper için kirli küçük bir uzantı yöntemi yazıyorum.HtmlHelper için bir uzantı yönteminde geçirilen bir lambda ifadesinden özellik değerini almanın en kolay yolu nedir?
Şu an çalışıyorum ama tercih ettiğimden biraz daha hantal görünüyor. Bunu yapmanın daha yalın bir yolu olduğunu umuyorum.
Şimdiye dek sahip olduğum şeyler.
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;
}
Teşekkürler! Böyle
Getvalue yönteminizi test ettim ve yardımcı bir seçim listesi olduğunda iyi yanıtlar aldım. Buradaki diğer yöntemler bu durumda başarısız oldu. – calterras