In my MVC5 application I have an enum class as shown below and with this approach I can pass the enum values i.e. US, UK instead of United States\" from Controller to View.
You will have to create method which will return description attribute. It can be some helper method, extension or whatever you want.
For example:
public class VisitorViewModel
{
[Key]
public int VisitorID { get; set; }
public Country Country { get ; set; }
//code omitted for brevity
public string GetDescription()
{
var type = typeof(Country);
var memInfo = type.GetMember(this.Country.ToString());
var attributes = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
return ((DescriptionAttribute)attributes[0]).Description;
}
}
so you can call it like
var result = db.Visitors.Select(m => new VisitorViewModel
{
VisitorID = m.VisitorID,
Country = m.GetDescription()
//code omitted for brevity
})
Or if it is better for you, create helper method which will be called similarly, but will be static ...
public class SomeHelperClass
{
public static string GetDescription(VisitorViewModel model)
{
var type = typeof(Country);
var memInfo = type.GetMember(model.Country.ToString());
var attributes = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
return ((DescriptionAttribute)attributes[0]).Description;
}
}
so call will be looks like
SomeHelperClass.GetDescription(model);
EDIT I got one idea, maybe it is not exactly what you want, maybe it can help you. If you add property with country name you can use this approach also:
public class VisitorViewModel
{
[Key]
public int VisitorID { get; set; }
public string CountryName { get; set; }
private Country _country;
public Country Country
{
get { return this._country; }
set
{
this._country = value;
this.CountryName = GetDescription(value);
}
}
//code omitted for brevity
private string GetDescription(Country country)
{
var type = typeof(Country);
var memInfo = type.GetMember(country.ToString());
var attributes = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
return ((DescriptionAttribute)attributes[0]).Description;
}
}
so if you will fill your model as you do
var result = db.Visitors.Select(m => new VisitorViewModel
{
VisitorID = m.VisitorID,
Country = m.Country
//code omitted for brevity
})
you will have automatically filled your CountryName property whcih can be use in kendo grid.
{ field: "CountryName", title: "Country" },