Có một vấn đề thường gặp khi viết các trình trợ giúp Html được nhập mạnh mẽ. Vấn đề là cách lấy cặp tên/giá trị thuộc tính. Giả sử chúng ta có sau Html khai helper:expression.Compile() vs ModelMetadata.FromLambdaExpression
public static string DatePickerFor<TModel>(this HtmlHelper<TModel> helper, Expression<Func<TModel, DateTime?>> expression)
Có một số giải pháp tôi thấy: 1.
var value = expression.Compile()(helper.ViewData.Model);
string name = ExpressionHelper.GetExpressionText(expression);
string fullName = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name);
2.
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
Object value = metadata.Model;
String name = metadata.PropertyName;
3. nhận tên thành viên duy nhất sử dụng MemberExpression
string GetPropertyName<T>(Expression<Func<T>> property)
{
var propertyInfo = (property.Body as MemberExpression).Member as PropertyInfo;
if (propertyInfo == null)
{
throw new ArgumentException("The lambda expression 'property' should point to a valid Property");
}
return propertyInfo.Name;
}
Tất cả chúng có triển khai khác nhau từ cái nhìn đầu tiên (được sử dụng Reflector để điều tra) nhưng tôi không đào sâu vào.
Tôi đã mắc kẹt với rất nhiều cách để giải quyết vấn đề và muốn biết giải pháp nào TỐT HƠN cho các tình huống khác nhau và TẠI SAO?
Tôi sẽ đánh giá cao sự giúp đỡ nào
Cảm ơn bạn. Bạn có biết có bất kỳ sự khác biệt nào trong các cách tiếp cận khác nhau cho các biến "giá trị" không? Có lẽ một số lợi ích hiệu suất cho một số trường hợp? – Cheburek