问题出现:

本次项目在用到下载文件、导出文件的时候,需要在下载、导出之前进行判断,最初使用方式一、二,没能解决问题

方式一:使用href直接跳转controller方法,以下载为例:

public ActionResult DownLoadFile(string QuoteUrl)
        {
            string path = Server.MapPath("~/FilesServer/" + QuoteUrl);      //获取物理路径
            int index = QuoteUrl.LastIndexOf('/');                          //获取/最后匹配索引
            string str = QuoteUrl.Substring(index + 1);                     //获得后缀
            string s = MimeMapping.GetMimeMapping(str);                     //获取文件类型
            return File(path, s, Path.GetFileName(path));               //下载
        }

如果在此处下载之前,进行判断空,则无法返回页面提示信息,使用response.write(“文件找不到了”)的话,会完全刷新整个页面,并存在样式变化等bug,(不太清楚)。

方式二:使用onclick事件,进入JS中,使用ajax传递参数到controller中进行判断是否为空,在success函数中根据resultdata进行提示,以下载为例:

同参考以上代码,假如文件路径不对,ajax应该返回字符串“文件找不到了”,但是如果文件路径没有问题的话,应该返回的是File()类型,进行下载,这样两种情况返回两种返回值类型,不符合代码设计。再者,使用ajax无法打开下载的对话框(不是很明白)。

方式三:同时使用onclick和href,根据先执行onclick根据onclick返回结果决定是否继续执行href的特性,onclick判断,href执行。

以下载为例:

function download_check(url, aid) {
    var f = false;
    $.ajax({
        async: false,
        cache: false,
        type: "GET",
        url: "/QualifiedSupplierManage/SupplierQuoteManage/DownloadCheck?QuoteUrl=" + url,//去controller中进行判断
        success: function (data) {
            if (data == "") {
                $("#" + aid).attr("href", "/QualifiedSupplierManage/SupplierQuoteManage/DownloadFile?FileUrl=" + url);//对a标签href赋值
                f = true;
            } else {
                $.modalMsg(data, "error"); //页面提示
                f = false;
            }

}
    });
    return f;
}

这个是controller中的判断方法

public ActionResult DownloadCheck(string QuoteUrl)
        {
            if (string.IsNullOrEmpty(QuoteUrl))
            {
                return Content("文件找不到了");
            }
            string path = Server.MapPath("~/FilesServer/" + QuoteUrl);       //获取物理路径
            int index = QuoteUrl.LastIndexOf('/');                           //获得最后/匹配索引
            string str = QuoteUrl.Substring(index + 1);                      //获得后缀
            string s = MimeMapping.GetMimeMapping(str);                     //获得文件类型
            //判断是否存在该文件
            if (!System.IO.File.Exists(path))
            {
                return Content("文件找不到了");
            }
            return Content("");
        }

在这里需要注意的是,a标签的href属性,不能在最初就写死,那样的话通过此方式,不论onclick返回true还是false,href都会进行跳转,应该是在onclick函数内,根据ajax返回结果,利用jquery对a标签的href属性进行赋值,并返回false or true,这样就解决了最初的问题。

ASP.Net MVC 中a标签的onclick时间和href同时存在时候的处理的更多相关文章

  1. 在Asp.Net MVC中实现RequiredIf标签对Model中的属性进行验证

    在Asp.Net MVC中可以用继承ValidationAttribute的方式,自定制实现RequiredIf标签对Model中的属性进行验证 具体场景为:某一属性是否允许为null的验证,要根据另 ...

  2. 在Asp.Net MVC中实现CompareValues标签对Model中的属性进行验证

    在Asp.Net MVC中可以用继承ValidationAttribute的方式,自定制实现Model两个中两个属性值的比较验证 具体应用场景为:要对两个属性值的大小进行验证 代码如下所示: /// ...

  3. 如何在 ASP.NET MVC 中集成 AngularJS(3)

    今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...

  4. 如何在 ASP.NET MVC 中集成 AngularJS(2)

    在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...

  5. 在 ASP.NET MVC 中充分利用 WebGrid (microsoft 官方示例)

    在 ASP.NET MVC 中充分利用 WebGrid https://msdn.microsoft.com/zh-cn/magazine/hh288075.aspx Stuart Leeks 下载代 ...

  6. 在 ASP.NET MVC 中使用 HTML Helpers 的那些事

    在 ASP.NET MVC 中使用 HTML Helpers 方法,可以返回得到标准的 HTML 标签,就像 <input>.<button> 或者 <img> 等 ...

  7. 如何在 ASP.NET MVC 中集成 AngularJS(1)

    介绍 当涉及到计算机软件的开发时,我想运用所有的最新技术.例如,前端使用最新的 JavaScript 技术,服务器端使用最新的基于 REST 的 Web API 服务.另外,还有最新的数据库技术.最新 ...

  8. Asp.net Mvc中利用ValidationAttribute实现xss过滤

    在网站开发中,需要注意的一个问题就是防范XSS攻击,Asp.net mvc中已经自动为我们提供了这个功能.用户提交数据时时,在生成Action参数的过程中asp.net会对用户提交的数据进行验证,一旦 ...

  9. ASP.NET MVC中实现多个按钮提交的几种方法

    有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...

随机推荐

  1. vue的初识与简单使用---前后端分离通过接口调取数据

    vue的安装 #### .环境搭建 ''' - 安装node ``` 官网下载安装包,傻瓜式安装:https://nodejs.org/zh-cn/ ``` - 安装cnpm ``` npm inst ...

  2. golang redis集群操作:redis-go-cluster

    背景 感觉redis-cli desktop及其难用,最近用golang做了个redis查询工具,支持单例和集群操作,终于不再卡顿!!! 用到的包 "github.com/garyburd/ ...

  3. Centos 7上安装Elasticsearch

    1. 先安装jdk yum search java|grep jdk查看yum库中都有哪些jdk版本 yum install java-1.8.0-openjdk.x86_64 两次y确认 2. ce ...

  4. 01-css的引入方式和常用选择器

    一.css介绍 现在的互联网前端分三层: HTML:超文本标记语言.从语义的角度描述页面结构. CSS:层叠样式表.从审美的角度负责页面样式. JS:JavaScript .从交互的角度描述页面行为 ...

  5. python反汇编函数字节码

    使用dis模块 >>> def test(): ... print(1) ... a = 1 ... print(a) ... >>> from dis impor ...

  6. ELK实时日志分析平台环境部署--完整记录(转)

    在日常运维工作中,对于系统和业务日志的处理尤为重要.今天,在这里分享一下自己部署的ELK(+Redis)-开源实时日志分析平台的记录过程(仅依据本人的实际操作为例说明,如有误述,敬请指出)~ ==== ...

  7. 计算机网络协议包头赏析-TCP

    仍然先把TCP报文段的格式放在这里,然后我们看图说话: TCP报文段也分为首部和数据两部分,首部默认情况下一般是20字节长度,但在一些需求情况下,会使用“可选字段”,这时,首部长度会有所增加. 下面, ...

  8. checkbox中jQuery对数组和对象的操作

    ------------------------------------------------------------------------------------------ 来段小例子,jQu ...

  9. python 小整数池 和intern 【整理】

    小整数对象池 (在python内置了) 整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池,避免为整数频繁申请和销毁内存空间. Python对小整数的定义是[-5,257]这些整 ...

  10. week06 07 创建RPC SERVER 换个镜像安装下载

    RPC server 使用python类库 https://pypi.org/project/python-jsonrpc/ 和NPM 不一样 他没有global选项 他安装的就是全局的安装的类库叫p ...