2015-11-29 72 views
1

我想使用Rotativa庫(1.6.4)發送帶有ActionAsPdf的參數,不幸的是,該函數被調用,但參數trainee它始終爲空。 這裏是我的代碼:C#Rotativa ActionAsPDF沒有參數通過

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" }; 

見習var爲對象T_Trainee不爲空的列表 - >出現在調試:

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

當該功能是在調試模式下電話,我可以清楚地看到,參數「實習生」是空的,但我仍然不明白爲什麼。

任何人都可以幫助我嗎?謝謝!

回答

0

富人居住?

嘗試示例代碼...

列表受訓者=新列表(); trainee.Add(new T_Trainee {email =「[email protected]」,phone =「555-1212」});

這是否行得通?

您也可以嘗試動作綁定到一個模型

公衆的ActionResult指數(ViewModelFoo VMC)

1

ActionAsPdf似乎是在Rotativa的最後一個版本被棄用的功能。

我改變了ViewAsPdf,現在它工作。這兩個函數之間的區別在於,您必須直接使用ViewAsPdf在Index方法調用中發送視圖模型。

這裏是我的代碼,我希望它能夠幫助別人:

代碼來調用索引和發送視圖模型

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); 
} 
+0

這爲我工作。唯一改變的是Index方法的方法簽名。我添加了模型ViewModelFoo對象。 public ActionResult Index(ViewModelFoo vmc) – shazia

0

第二參數ActionAsPdf()RouteValueDictionary的類型,它是一個鍵和值的字典。您傳入了自定義類型,因此將其轉換爲空值。它應該工作,如果你通過RouteValueDictionary來代替。

ViewAsPdf()接收一個對象參數,並將其視爲視圖綁定的模型,這就是它爲什麼起作用的原因。

你可以看看它的源代碼在這裏: https://github.com/webgio/Rotativa/blob/master/Rotativa/ActionAsPdf.cs