将动态模型传递给局部视图
本文关键字:局部 视图 动态 模型 | 更新日期: 2023-09-27 18:02:29
我有一个选项供用户选择2个日期范围之间的报表视图。
下面是我的ReportsViewModel.cspublic class ReportsViewModel
{
public DateTime DateRangeFrom { get; set; }
public DateTime DateRangeTo { get; set; }
public string ReportFor { get; set; }
public SelectList ReportForList { get; set; }
}
现在ReportForList
值像任何, Table1 , 表, Table3 。
如果用户选择任何将要生成的model
将来自所有3个表,因此模型的结构将基于用户选择。如何生成model
并将其转化为PartialView
呢?这里是用Key/Value
还是用dynamic
?是否有办法达到上述要求的报告结构?
一般避免使用dynamic
。你失去了编译时检查、智能感知和在视图中使用***For()
方法的能力(lambda表达式不支持动态对象)。
使用强类型并为每个报表创建视图模型。假设有一些公共属性,那么从基本模型
开始。public abstract class ReportBase
{
.... // common properties
}
public class Report1 : ReportBase
{
.... // properties specific table 1
}
public class Report2 : ReportBase
{
.... // properties specific table 2
}
,然后为每个模型创建强类型的部分视图,例如_Report1.cshtml
@model Report1 // or IEnumerable<Report1>
和控制器方法
public PartialViewResult ShowReport(ReportsViewModel model)
{
if (model.ReportFor == "Table1")
{
Report1 report = .... // your query to generate data
return PartialView("_Report1", report);
}
else if (model.ReportFor == "Table2")
{
Report2 report = .... // your query to generate data
return PartialView("_Report2", report);
}
else if (....