ASP.Net MVC 中a标签的onclick时间和href同时存在时候的处理
问题出现:
本次项目在用到下载文件、导出文件的时候,需要在下载、导出之前进行判断,最初使用方式一、二,没能解决问题
方式一:使用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同时存在时候的处理的更多相关文章
- 在Asp.Net MVC中实现RequiredIf标签对Model中的属性进行验证
在Asp.Net MVC中可以用继承ValidationAttribute的方式,自定制实现RequiredIf标签对Model中的属性进行验证 具体场景为:某一属性是否允许为null的验证,要根据另 ...
- 在Asp.Net MVC中实现CompareValues标签对Model中的属性进行验证
在Asp.Net MVC中可以用继承ValidationAttribute的方式,自定制实现Model两个中两个属性值的比较验证 具体应用场景为:要对两个属性值的大小进行验证 代码如下所示: /// ...
- 如何在 ASP.NET MVC 中集成 AngularJS(3)
今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...
- 如何在 ASP.NET MVC 中集成 AngularJS(2)
在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...
- 在 ASP.NET MVC 中充分利用 WebGrid (microsoft 官方示例)
在 ASP.NET MVC 中充分利用 WebGrid https://msdn.microsoft.com/zh-cn/magazine/hh288075.aspx Stuart Leeks 下载代 ...
- 在 ASP.NET MVC 中使用 HTML Helpers 的那些事
在 ASP.NET MVC 中使用 HTML Helpers 方法,可以返回得到标准的 HTML 标签,就像 <input>.<button> 或者 <img> 等 ...
- 如何在 ASP.NET MVC 中集成 AngularJS(1)
介绍 当涉及到计算机软件的开发时,我想运用所有的最新技术.例如,前端使用最新的 JavaScript 技术,服务器端使用最新的基于 REST 的 Web API 服务.另外,还有最新的数据库技术.最新 ...
- Asp.net Mvc中利用ValidationAttribute实现xss过滤
在网站开发中,需要注意的一个问题就是防范XSS攻击,Asp.net mvc中已经自动为我们提供了这个功能.用户提交数据时时,在生成Action参数的过程中asp.net会对用户提交的数据进行验证,一旦 ...
- ASP.NET MVC中实现多个按钮提交的几种方法
有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...
随机推荐
- JVM老年代和新生代的比例
在 Java 中,堆被划分成两个不同的区域:新生代 ( Young ).老年代 ( Old ).新生代 ( Young ) 又被划分为三个区域:Eden.From Survivor.To Surviv ...
- 无法解析db.properties,spring报错:Caused by: java.sql.SQLException: unkow jdbc driver : ${url}
db.properties中配置了url等jdbc连接属性: driver=org.sqlite.JDBCurl=jdbc:sqlite:D:/xxx/data/sqliteDB/demo.dbuse ...
- python语言中的数据类型之列表
数据类型及内置方法 列表: list 可变类型,有序 用途:用来记录多个值(同属性) 定义方式:在[ ]内用逗号分隔开多个任意类型的值 l=['a','b','c'] #l=list(['a' ...
- RESET MASTER和RESET SLAVE使用场景和说明,以及清除主从同步关系
mysql主从复制中,需要将从库提升为主库,需要取消其从库角色,这可通过执行RESET SLAVE ALL清除从库的同步复制信息.包括连接信息和二进制文件名.位置.从库上执行这个命令后,使用show ...
- UGUI 判断元素进入舞台
void LateUpdate () { if(!_isLoaded){ RectTransform rectt=this.GetComponent<RectTransform>(); f ...
- LeetCode OJ 60. Permutation Sequence
题目 The set [1,2,3,-,n] contains a total of n! unique permutations. By listing and labeling all of th ...
- 关于HashMap多线程下环形链表的总结
目录 1. 概述 2. 敲黑板的点 3. 为什么会出现循环链表的情况呢?(jdk1.7) 4. jdk1.8中改进了resize方法 5. HashMap的线程安全问题 6. 总结 1. 概述 本文主 ...
- 推荐一款好用并且免费的markdown软件 Typora
Typora 的linux 安装步骤 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys BA300B7755AFCFAE su ...
- 前端Web安全介绍及规避。。。
本文转载自:https://jelon.top/posts/web-security/ 如果侵权,请及时告知. 一.跨站脚本攻击 (xss) 反射型跨站脚本攻击 攻击者会通过社会工程学手段,发送一个 ...
- 把Swift中的String转成NSString ,获取NSString的方法
1.0 在Swift中的 String 并没有提供什么方法,直接把它自身转变成 Int .Float 等,而在OC中我们就可以这样 "123".integerValue 来获取它 ...