我可以选择用户选择2个日期范围之间的报告视图。
以下是我的 ReportsViewModel.cs
public class ReportsViewModel
{
public DateTime DateRangeFrom { get; set; }
public DateTime DateRangeTo { get; set; }
public string ReportFor { get; set; }
public SelectList ReportForList { get; set; }
}
现在ReportForList
的值将为任意,表1 ,表2 ,表3 。< / p>
如果用户选择任何,将要生成的model
将来自所有3个表,因此模型的结构将基于用户选择。我如何为此生成model
并将其传递到PartialView
?它是一组Key/Value
对还是dynamic
在这里使用?无论如何要实现上述要求的报告结构吗?
答案 0 :(得分:1)
通常,请避免使用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 (....