我有一個鏈接如下。使用JSON和MVC將PDF返回給瀏覽器?
@Html.ActionLink("Create Report", "Screenreport", "Reports", null, new { @class = "subNavA AddBorderTop", id = "screenReport", title = "Create Report" })
一旦鏈接被點擊,我有一個下面的jQuery代碼,它創建一個JSON對象併發布信息。
$().ready(function() {
// Create Report fron the screen data
$("#screenReport").live("click", function (event) { GenerateScreenReport(this, event); });
}) /* end document.ready() */
function GenerateScreenReport(clikedtag, event) {
var table = $(".EvrakTable").html();
var screendata = tableParser(table);
var Screentable = { Screenlist: screendata };
var myurl = $(clikedtag).attr("href");
var title = $(clikedtag).attr("title");
$.ajax({
url: myurl,
type: 'POST',
data: JSON.stringify(Screentable),
dataType: 'json',
contentType: 'application/json',
success: function() { alert("Got it"); }
});
};
處理JSON我有以下兩個類。實現了在同一個命名空間
namespace MyProject.ViewModels
{
public class Screenrecord
{
public string Fname{ get; set; }
public string LName { get; set; }
public string Age { get; set; }
public string DOB { get; set; }
}
public class Screentable
{
public List<Screenrecord> Screenlist { get; set; }
}
}
,並在我的控制器兩班,我有以下代碼:
[HttpPost]
public FileStreamResult Screenreport(Screentable screendata)
{
MemoryStream outputStream = new MemoryStream();
MemoryStream workStream = new MemoryStream();
Document document = new Document();
PdfWriter.GetInstance(document, workStream);
document.Open();
document.Add(new Paragraph("Hello World"));
document.Add(new Paragraph(DateTime.Now.ToString()));
document.Close();
byte[] byteInfo = workStream.ToArray();
outputStream.Write(byteInfo, 0, byteInfo.Length);
outputStream.Position = 0;
return new FileStreamResult(outputStream, "application/pdf");
}
此代碼應該GERATE PDF。 如果我離開[HttpPost],它不會生成PDF,它會進入/ Screenreport頁面,但是我看到我的JSON正確傳遞給控制器。 (screendata填充正確 - 在控制器中)
但是,如果我註釋掉[HttpPost],它會生成一個PDF,但screendata(在控制器中)爲空。
有人可以請解釋什麼是怎麼回事,並幫助我弄清楚。提前致謝。
難道不是有勇敢的靈魂來幫助我嗎?我被困在這裏。它看起來像一個技術問題而不是實現。 – user762912 2011-05-24 16:42:47