1

我正在尝试使用 Rotativa 库(1.6.4)通过 ActionAsPdf 发送参数,不幸的是,该函数被调用但其中的参数trainee始终为空。这是我的代码:

List<T_Trainee> trainee= new List<T_Trainee>();
foreach (int f in foo)
{
    T_Trainee t = new T_Trainee();
    t.email = (string)Session["Mail"];
    t.phone = (string)Session["Phone"];
    trainee.Add(t);
}

//code to get the PDF     
ActionAsPdf pdf = new ActionAsPdf("Index", trainee) { FileName = "Bulletin.pdf" };

Trainee var 是对象 T_Trainee not null 的列表 -> 在调试中看到:

//function that return the PDF
public ActionResult Index(List<T_Trainee> trainee)
{
    ViewModelFoo vmc = new ViewModelFoo();
    vmc.trainee = trainee;
    return View(vmc);
}

在调试模式下调用该函数时,我可以清楚地看到参数“trainee”为空,但我仍然不明白为什么。

谁能帮我?谢谢!

4

3 回答 3

1

ActionAsPdf 似乎是 Rotativa 最新版本中已弃用的功能。

我用 ViewAsPdf 改变了它,现在它可以工作了。这两个函数之间的区别在于,您必须使用 ViewAsPdf 在 Index 方法调用中直接发送视图模型。

这是我的代码,希望对某人有所帮助:

调用索引并发送 viewModel 的代码

ViewModelFoo vmc = new ViewModelFoo();
List<T_Trainee> trainees= new List<T_Trainee>();
foreach (int f in foo)
{
    T_Trainee t = new T_Trainee();
    t.email = (string)Session["Mail"];
    t.phone = (string)Session["Phone"];
    trainees.Add(t);
}
vmc.trainees = trainees;
//code to get the PDF     
ViewAsPdf pdf = new ViewAsPdf("Index", vmc)
{
   FileName = "File.pdf",
   PageSize = Rotativa.Options.Size.A4,
   PageMargins = { Left = 0, Right = 0 }
};

生成视图的索引

public ActionResult Index()
{
    return View(vmc);
}
于 2015-12-13T01:20:18.990 回答
0

foo 是否已填充?

尝试示例代码...

列出受训者=新列表();trainee.Add(new T_Trainee {email = "sample@email.com", phone = "555-1212"});

那样有用吗?

您也可以尝试将 Action 绑定到模型

公共 ActionResult 索引(ViewModelFoo vmc)

于 2015-12-11T22:15:15.713 回答
0

的第二个参数ActionAsPdf()是 type of RouteValueDictionary,它是一个 key 和 value 的字典。您传入了一个自定义类型,从而将其转换为 null。如果你通过 aRouteValueDictionary代替它应该可以工作。

ViewAsPdf()接收对象参数并将其视为视图绑定的模型,这就是它起作用的原因。

你可以在这里查看它的源代码: https ://github.com/webgio/Rotativa/blob/master/Rotativa/ActionAsPdf.cs

于 2015-12-21T08:42:17.300 回答