我有一个动作结果,返回一个创建的File对象(简化显示!):
public ActionResult Create(int recID, int templateID)
{
//Get dbRecord from recID
DBRecord dbRecord = db.dbRecord.Find(recID);
//Get Template from templateID
Template template = db.Templates.Find(templateID);
if (template == null) throw new FileLoadException(string.Format("No database record found for template reference {0}",templateID));
//set fileOutput details
WordFile fileOutput = new WordFile(dbRecord, Server.MapPath("~/Documents/"),template);
//Create XML object for Template
XmlDocument xDoc = new XmlDocument();
//Save resulting document
xDoc.InnerXml = mergeData(template,dbRecord);
xDoc.Save(fileOutput.fullName);
if (!System.IO.File.Exists(fileOutput.fullName)) throw new FileNotFoundException(string.Format("File {0} could not be created", fileOutput.fileName));
//Return saved document
return File(fileOutput.fullName, "application/doc", fileOutput.fileName);
}
如果我通过HTML RouteLink调用它
<%: Html.RouteLink("Generate via HTML
, "GenerateDocument"
, new RouteValueDictionary(
new {
controller = "Template"
, action = "Create"
, recID = 1
,templateID = 1
}
)
)%>
编辑1:它工作正常,生成文档并提示用户打开,保存等。但是,如果我通过AJAX RouteLink调用它,代码将逐步完成,文档是在服务器上创建的,但系统不会提示用户打开或保存。
<%: Ajax.RouteLink("Generate via AJAX"
, "GenerateDocument"
, new RouteValueDictionary(
new {
controller = "Template"
, action = "Create"
, recID = 1
, templateID = 1 }
)
, new AjaxOptions
{
HttpMethod="POST"
, LoadingElementId="Refresh"
})%>
是否存在阻止AJAX返回文件类型的固有限制,或者是否错过了正确的搜索组合以找到明显的答案?
答案 0 :(得分:0)
我不确定我理解你在谈论什么。您是否尝试将文件内容返回到javascript变量?这是我唯一可以想象的“AJAX RouteLink”。如果您希望它提示用户打开或保存,请使用普通链接。如果您尝试在页面中嵌入文件,请不要返回文件,返回用于嵌入的html。