leo*_*ora 8 asp.net-mvc jquery powerpoint fileresult
我的asp.net-mvc项目中有以下javascript代码和控制器操作:
使用Javascript:
$("#exportPPT").live('click', function (e) {
window.location.href = "/Initiative/GenerateFile" + GenerateParams();
});
Run Code Online (Sandbox Code Playgroud)
C#控制器:
public ActionResult GenerateFile(MyParams myParams)
{
var template = Server.MapPath(PPT_ROOT + "/template.pptx");
IEnumerable<Order> orders = Model.GetOrders(myparams);
var pptResults = GeneratePowerpointFile(orders);
return File(pptResults.Content, "application/vnd.ms-powerpoint", pptResults.FileName);
}
Run Code Online (Sandbox Code Playgroud)
但是在某些情况下,让我们说当orders.Count()为0然后而不是生成文件时,我宁愿向用户回复一条错误信息,说明你有错误.
鉴于上述代码,实现此目的的最佳方法是什么?我想把它改成ajax调用,但我不知道如何在json请求中下载我的Fie()和包(如果支持的话).
有什么建议?
Ant*_*haw 10
我会向另一个检查订单计数的控制器操作发起$ .get请求.返回该值,并在适当的情况下返回错误消息.在需要时显示错误消息,否则处理重定向以下载文件.这是对控制器的额外调用,但它允许您完全控制并处理错误的可能性,而无需重定向您的用户.
$("#exportPPT").live('click', function (e) {
$.get( "/Initiative/CheckForOrders" + GenerateParams(), function( data ) {
if (data.IsValid) {
window.location.href = "/Initiative/GenerateFile" + GenerateParams();
} else {
alert(data.ErrorMessage); // or show a div containing error message
}
});
});
Run Code Online (Sandbox Code Playgroud)
控制器动作:
public ActionResult CheckForOrders(MyParams myParams)
{
IEnumerable<Order> orders = Model.GetOrders(myparams);
if (orders.Any())
return Json(new { IsValid=true }, JsonRequestBehavior.AllowGet);
return Json(new { IsValid=false, ErrorMessage="No orders" }, JsonRequestBehavior.AllowGet);
}
Run Code Online (Sandbox Code Playgroud)
我将返回一个状态,表示资源不存在并返回null?然后你就可以相应地处理你的JavaScript它无需担心做多Ajax调用来检查一个可用或安全隐患,如果有人绕过此类检查.
例如...
调节器
public ActionResult GenerateFile(MyParams myParams)
{
var template = Server.MapPath(PPT_ROOT + "/template.pptx");
IEnumerable<Order> orders = Model.GetOrders(myparams);
if(!orders.Any()){
Response.StatusCode = (int)HttpStatusCode.NotFound
Response.StatusDescription = HttpStatusCode.NotFound.ToString();
Response.TrySkipIisCustomErrors = true;
return EmptyResult;
}
var pptResults = GeneratePowerpointFile(orders);
return new File(pptResults.Content, "application/vnd.ms-powerpoint", pptResults.FileName);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7775 次 |
| 最近记录: |