В MVC
было множество полезных помощников для работы с HtmlHelper
с. Теперь все они исчезли, и я пытаюсь перенести одно из своих приложений в CORE 3.0
.
У меня есть помощник со следующей подписью:
public static IHtmlContent BootstrapDropDownFor<TModel, TValue>(
this IHtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression,
List<SelectListItem> selectListItems,
object htmlAttributes)
{
Я хотел бы знатькак правильно получить значение / имя свойства из самого выражения.
В качестве обходного пути я использую это:
public static PropertyInfo GetPropertyInfo<TSource, TProperty>(
this TSource source,
Expression<Func<TSource, TProperty>> expr)
{
var type = typeof(TSource);
if (!(expr.Body is MemberExpression member))
throw new ArgumentException($"Expression '{expr}' refers to a method, not a property.");
var propInfo = member.Member as PropertyInfo;
if (propInfo == null)
throw new ArgumentException($"Expression '{expr}' refers to a field, not a property.");
if (type != propInfo.ReflectedType && propInfo.ReflectedType != null && !type.IsSubclassOf(propInfo.ReflectedType))
throw new ArgumentException($"Expression '{expr}' refers to a property that is not from type {type}.");
return propInfo;
}
public static TProperty GetProperty<TSource, TProperty>(
this TSource source,
Expression<Func<TSource, TProperty>> expr)
{
return (TProperty) source.GetPropertyInfo(expr).GetValue(source);
}
public static string GetPropertyName<TSource, TProperty>(
this TSource source,
Expression<Func<TSource, TProperty>> expr)
{
return source.GetPropertyInfo(expr).Name;
}
:
var exprPropName = model.GetPropertyName(expression);
var exprProp = model.GetProperty(expression)
Я просто хочу знать, что является заменой отсутствующей логики (возможно, связано сModelExplorer / метаданные, если есть)?