我目前正在使用Asp.Net MVC和C#开发应用程序。其中一个要求是检查项目的进程,然后仅显示相应的div。所以我决定在Db中创建一个包含以下内容的表:
Id ProcessDescription DivOneVisible DivTwoVisible
1 Approved True False
2 Analysis True True
...
注意 - Id和ProcessDescription永远不会改变
目前该表仅包含10行数据,但想法是,将来可以添加更多行/列。
然后我继续创建适当的方法,每个Div对应一个
public bool ShowDivOne(int id)
{
var data = uow.GetRepository<ItemProcess>().GetById(id);
bool showDivOne = data.DivOneVisible.HasValue ? data.DivOneVisible.Value : false;
if (showDivOne)
return true;
else
return false;
}
我对ShowdivTwo()
方法使用与上面相同的代码,但匹配不同的列。然后在视图中我做
@if(ShowDivOne){//div one code here}
@if(ShowDivTwo){//div two code here}
这有效,但我想知道是否有更通用的方法,我可以编写一个方法,即使添加了新的列或行,也会覆盖每个方案。
答案 0 :(得分:0)
你还需要在某个地方使用Database和ViewModel之间的映射。目前它在你的方法中被硬编码。
如果您开始使用反射并且具有带属性名称的映射数组,则可以使其绝对通用。但我不建议这样做,因为它过于复杂,难以维护和改变。 (如果您愿意,我可以详细了解实施情况)。
对于您的示例,我建议每个项目都有一个viewmodel,其中包含要显示的div的属性。
public class ProcessViewModel
{
public int Id {get;set;}
public bool ShowDivOne {get;set;}
public bool ShowDivTwo {get;set;}
ProcessViewModel(){}
ProcessViewModel(ItemProcess data){
Id = data.Id;
ShowDivOne = data.DivOneVisible.HasValue ? data.DivOneVisible.Value : false;
ShowDivTwo = data.DivTwoVisible.HasValue ? data.DivTwoVisible.Value : false;
}
}
您仍然可以单独查询每个项目或完全查询它们并将数据传递给viewmodel进行构建。
一个关于视图的简单foreach遍历视图模型列表。
扩展它以包含更多属性将是非常容易和前进的,只需要维护最少的代码。