我有一个简单的Controller Action,它将pdf作为FileContentResult返回。我想将pdf嵌入到一个新窗口中,并在视图中添加一些其他html元素,如按钮。我已经尝试静态插入一个对象标签,然后动态设置指向我的控制器动作网址的数据属性。这什么都不做。我也尝试过使用PDFObject基本上做同样的事情,但这也不起作用(虽然奇怪的是,提琴手说我找不到我的动作方法,虽然我之前在同一页面上使用过它)。我怀疑,因为没有任何东西与对象标签交互,所以它们永远不会触发url中的动作。如何在采用动态生成的参数的mvc操作中指向渲染的pdf文件?现在我也没有例外。
// My controller
[HttpGet]
public ActionResult GetReportFile(string pReportType, string pK2ID, DateTime pPeriodRun)
{
return new FileContentResult(DataModel.KrisReportDataModelProp.GetReportFile(pReportType, pK2ID, DateTime.MinValue), "application/pdf") { FileDownloadName = "test.pdf" };
}
// My javascript
var pdfReportResult = new PDFObject({
url: '../../KrisReport/GetReportFile?pReportType=' + lReportTypeSubmissionQuerySelector.val() + '&pK2ID=' + lK2ID + '&pPeriodRun=' + lPeriodRun
}).embed('reportPlaceHolder');
答案 0 :(得分:0)
就在最近,当我不得不提交表单,验证表单以及它是否有效时,我遇到了一个问题,向用户提供了下载pdf文件的选项。请注意,下载pdf文件是可选的。用户需要单击“下载Pdf”按钮,该按钮在初始表单验证之前不可用。这听起来像你的问题类似的东西。 我通过以下方式实现了这一目标:
查看型号:
public class PatientModel
{
public int id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public byte[] PdfByteArray { get; set; }
}
控制器上的操作:
// Action to display initial form
[HttpGet]
public ActionResult CreatePatient()
{
PatientModel model = new PatientModel();
return View(model);
}
// Action to post patient
[HttpPost]
public ActionResult CreatePatient(PatientModel model)
{
if(ModelState.IsValid)
{
// whatever logic to save new patient
mPatient.Save(model);
// whatever logic to generate pdf byte[]. I have a helper for this.
string html = "[some html based on which a pdf will be generated]"
byte[] pdf = PDFHelper.GeneratePDFFromContents(html);
model.PdfByteArray = pdf;
}
return View(model);
}
// action to download PDF file given byte[]
[HttpPost]
public ActionResult PdfFromByteArray(byte[] pdfByteArray)
{
return File(pdfByteArray, "application/pdf", "MyHistory.pdf");
}
查看:强>
@model PatientModel
@using (Html.BeginForm())
{
First Name: @Html.TextBoxFor(x => x.FirstName)
Last Name: @Html.TextBoxFor(x => x.LastName)
@html.ValidationSummary()
<input type="submit" value="Submit" />
}
@if (ViewData.ModelState.IsValid)
{
using (Html.BeginForm("PdfFromByteArray", "[Controller Name]"))
{
@Html.HiddenFor(x => x.PdfByteArray)
<input type="submit" value="Download File" />
}
}
如果初始形式有效,我将pdf的字节数组作为隐藏输入嵌入到视图中。如果用户请求下载pdf(使用该隐藏输入提交第二个表单),则会调用另一个从byte []生成pdf的操作并将其返回。