我有以下问题。我在实体框架模型中有一个类,它具有属性,例如:
class Company{
public string Name {get; set};
public string Address {get; set};
public string Email{get; set};
public string WebSite {get; set};
}
我在数据库中有配置,用于定义是否应显示某个字段,例如:
这是动态的,所有字段都按名称引用。
当我在视图中显示对象时。将单个对象转换为某个字符会很好,其中键将是属性名称,值将是属性值,因此我可以按名称检查每个字段是否应该显示(可能在某些for-each循环中)例如:
CompanyDetails.cshtml
<h2>Company Details</h2>
@foreach(var property in modelDictionary.Keys){
@if(IsVisible(property))
@Html.Raw( modelDictionary[property] )
}
将单个对象从实体框架模型转换为属性字典的最佳方法是什么?我应该在控制器动作中将它从对象转换为字典,还是在视图中以某种方式使用模型元数据?
我可以在Company类上使用反射并查找类中的所有属性,这样我就可以填充字典了,但这看起来像是太老派的解决方案,所以我徘徊有没有更好的方法来做到这一点?
由于
答案 0 :(得分:2)
您可以使用RouteValueDictionary
,它允许您将对象转换为字典:
public class Company
{
public string Name { get; set; }
public string Address { get; set; }
public string Email { get; set; }
public string WebSite { get; set; }
}
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new Company
{
Address = "some address",
Email = "some email",
Name = "some name",
WebSite = "some website"
};
return View(new RouteValueDictionary(model));
}
}
并在视图中:
@model RouteValueDictionary
<h2>Company Details</h2>
@foreach (var item in Model)
{
if (IsVisible(item.Key))
{
<div>@item.Value</div>
}
}
答案 1 :(得分:1)
您可以在实体上实现索引器,并将反射映射到实体中的某个属性。
类似的东西:
class Entity
{
public bool this[int index]
{
get
{
// Select all properties, order by name and return the property index
}
}
public bool this[string name]
{
get
{
// Select all properties and return the correct one.
}
}
}