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

时间:2016-08-15 08:48:02

标签: c# asp.net-mvc asp.net-mvc-4 razor

我可以选择用户选择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在这里使用?无论如何要实现上述要求的报告结构吗?

1 个答案:

答案 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 (....