使用<add key="UnobtrusiveJavaScriptEnabled" value="true" />的坑

来源:互联网 发布:天下数据 科学上网 编辑:程序博客网 时间:2024/06/03 19:18

  这阶段在做一个文件输出浏览器保存的内容,使用的是mvc4,但是由于需要FileResult和javascriptResult同时可以输出,我这边定义了ActionResult做为输出,其中的代码很简单,就是让datatable可以在excel的流写入,然后通过File方法保存浏览器。


  

/// <summary>        /// NPOI插件保存excel到网页,用于MVC4        /// </summary>        /// <returns></returns>        public ActionResult DownLoadExcel()        {            string Path = AppDomain.CurrentDomain.BaseDirectory + "Resource\\Config\\DatetimeConfig.xml";            XElement xele = XElement.Load(Path);            if ((string)xele.Attribute("content") != "")            {                DateTime dateTime = DateTime.Parse((string) xele.Attribute("content"));                TimeSpan span = DateTime.Now - dateTime;                if (span.TotalMinutes < 30)                {                    //Response.Redirect("/Home/Index");                    return this.Content("<script>alert('30分钟内不能重复导出到excel!')</script>");                                       return this.Content("alert('作成功')", "application/x-javascript");                    return Content("alert('购物订单成功处理!');", "text/javascript");                    //string script = string.Format("alert('库存不足! ({0})');", ":");                    //return JavaScript(script);                    return JavaScript("alert('30分钟内不能重复导出到excel!');");                    //return Content("<font color='red'>你好啊ContentResult</font>");                    // return new EmptyResult();                 }            }            //延迟30分钟再可以提交                     string sql = "SELECT  [UserID],[UserCode],[UserName],[ParentID],[Position],[Mobile],[Email],[Levels],[AttentionTime]FROM Users WHERE CreateStatus = 1 AND(AttentionState = 1); ";            DataTable dt = ObjectContainer.Instance.GetObject<ISqlExportService>().GetDataTableFromSql(Request, sql);            //创建Excel文件的对象              NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();            //添加一个sheet              NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1");            //给sheet1添加第一行的头部标题              NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);            //row1.RowStyle.FillBackgroundColor = "";              for (int i = 0; i < dt.Columns.Count; i++)            {                row1.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName);            }            //将数据逐步写入sheet1各个行              for (int i = 0; i < dt.Rows.Count; i++)            {                NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1);                for (int j = 0; j < dt.Columns.Count; j++)                {                    rowtemp.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString().Trim());                }            }            string strdate = DateTime.Now.ToString("yyyyMMddhhmmss");//获取当前时间              // 写入到客户端               System.IO.MemoryStream ms = new System.IO.MemoryStream();            book.Write(ms);            ms.Seek(0, SeekOrigin.Begin);            DateTime = DateTime.Now;            xele.SetAttributeValue("content", DateTime);            xele.Save(AppDomain.CurrentDomain.BaseDirectory + "Resource\\Config\\DatetimeConfig.xml");            return File(ms, "application/vnd.ms-excel", strdate + "Excel.xls");        }
  其中做了30分钟的重复登录限制,如果输出一次再点击的话低于30分钟会不允许并且弹出窗口提示,这是问题的关键,那我这个control还会执行,弹出后希望保持在当前页面,我最先想到的在Onsucess中定义JavaScript的函数来进行回退跳转,这个方法一直不能执行。

    function refresh(e) {             alert("test");     }      function SearchSqlToExcel() {        var parameters = {            Sheetname: "User",            fileName: "e:\\a.xls"        };        $.ajax({            type: "POST",            url: "@Url.Content("~/SqlExportService/DownLoadExcel")",            contentType: "application/json",            data: JSON.stringify(parameters)        });         }</script>@using (Ajax.BeginForm("DownLoadExcel", "SqlExportService", new AjaxOptions{ HttpMethod = "Post", OnSuccess = "refresh", OnBegin = "" })){    <input type = "submit" value = "导出excel" />}

    后来找过很多资料,也在本博客中转载贴出,研究了ContentResult和EmptyResult以及JavascriptResult的各种输出,最后说<script type="text/javascript" src="@Url.Content("~/Resource/Scripts/jquery.unobtrusive-ajax.js")"></script>这段没有写,之后又说jquery要1.8.3,再后来也把web.config的<add key="UnobtrusiveJavaScriptEnabled" value="true" />也加到Appsetting,refresh终于可以执行了,但是文件却不能下载了。最初的目的实现不了了,后来只能再想起他办法。

  

0 0
原创粉丝点击