Я работаю на веб-сайте ASP.net MVC4 и имею модель & Просмотрите модельный слой. Из-за определенных причин у меня есть разные имена для нескольких объектов в модели и ViewModelМетод расширения для пользовательских атрибутов
Модель
public partial class Project
{
public string Desc {get; set;}
}
вид Модель
public class ProjectViewModel
{
public string Description { get; set; }
}
Теперь у модели слоя, мне нужно используйте ViewModel имя свойства, если оно отличается. Я думал о создании пользовательского атрибута, так что я могу иметь что-то вроде этого в моделях:
public partial class Project
{
[ViewModelPropertyName("Description")]
public string Desc {get;set;}
}
и использовать его на уровне модели, как
string.Format("ViewModel Property Name is {0}", this.Desc.ViewModelPropertyName())
Я хочу, чтобы это родовое, так что если есть нет атрибута ViewModelPropertyName
для свойства, тогда он должен возвращать то же имя свойства, то есть если свойство Desc
не имеет атрибута, оно должно возвращать только "Desc"
.
Вот что я пытался
public class ViewModelPropertyNameAttribute : System.Attribute
{
#region Fields
string viewModelPropertyName;
#endregion
#region Properties
public string GetViewModelPropertyName()
{
return viewModelPropertyName;
}
#endregion
#region Constructor
public ViewModelPropertyNameAttribute(string propertyName)
{
this.viewModelPropertyName = propertyName;
}
#endregion
}
Нужна помощь для того, как получить доступ к пользовательский атрибут
Текущее состояние
public static class ModelExtensionMethods
{
public static string ViewModelPropertyName(this Object obj)
{
// ERROR: Cannot convert from 'object' to 'System.Reflect.Assembly'
System.Attribute[] attrs = System.Attribute.GetCustomAttributes(obj);
foreach (System.Attribute attr in attrs)
{
if (attr is ViewModelPropertyNameAttribute)
{
return ((ViewModelPropertyNameAttribute)attr).GetViewModelPropertyName();
}
}
return string.Empty;
}
}
Но есть ошибка компиляции времени:
'this.Desc.ViewModelPropertyName' должно быть' this.Desc.GetViewModelPropertyName() '. Нет такой вещи, как свойство расширения. – Khan
Typo, я имел в виду только это. Спасибо – Rohit