将动态模型传递给局部视图

本文关键字:局部 视图 动态 模型 | 更新日期: 2023-09-27 18:02:29

我有一个选项供用户选择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值像任何, 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 (....