在我的控制器中,我有一个返回 FileStreamResult 的 GenerateDocument 方法。
在我看来,我的 javascript 只是像这样打开一个新的;window.open('/controller/GenerateDocument/?id=blah');
我需要我的 GenerateDocument 方法:1. 当文档可以创建/获取而没有错误时返回一个 pdf,2. 当有错误时返回一个新页面/视图。
这是控制器代码:
public FileStreamResult GenerateDocument(int id)
{
string errorResult = string.Empty;
try
{
DocumentDetail documentDetail =
DocumentGenerator.GenerateAgreements(id, DcmDocumentEntityType.Sponsor, GetAuthUser());
if (documentDetail == null) return null;
Stream stream = DocumentGenerator.RetrieveFile(documentDetail);
return new FileStreamResult(stream, "application/pdf");
}
catch (Exception ex)
{
errorResult = FormatException(ex);
Trace.TraceError(errorResult);
}
//ViewBag.Error = HttpUtility.HtmlEncode(errorResult).Replace("\n", "<br />");
//return View("DocGenerationError");
return null;
}
我尝试使用 ActionResult 并在出现错误时返回视图,但正如我在此线程的评论中指出的那样,在页面 javascript 中,window.open(url) 无法正常工作。
这是视图代码:
$('#ActionMenu').change(function() {
var action = $(this).val();
switch (action) {
case 'Generate Sponsor Agreement':
window.open('/Sponsor/GenerateDocument/?id=@(Model.SponsorID)');
break;
other cases
default:
}
});
注意:上面的控制器代码可以工作。当我切换到返回 ActionResult 并取消注释它停止工作的异常处理内容时。