用FormData上传文件,没有进入url上的方法

-一个大坑 2018-12-03 02:01:42
本来应该进入WH05.aspx下UploadExcel,但是后台打断点进不去,每次进的Page_Load

$(document).on('click','#btnUpload',function(){
var formData = new FormData($('#FileUpload')[0].files[0])

$.ajax({
type: 'post',
url: 'WH05.aspx/UploadExcel',
data: formData,
cache: false,
processData: false,//用于对data参数进行序列化处理 这里必须false
contentType: false, //必须
success: function (data) {
alert(data.d)
},
error: function (err) {
alert('發生錯誤,請聯繫IT!');
}
})
})



[WebMethod]
public static string UploadExcel(object objExcel)
{
return "OK";
}
...全文
1061 29 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_43822298 2018-12-05
  • 打赏
  • 举报
回复
看起来完全不懂,写代码好难啊。
Hello World, 2018-12-05
  • 打赏
  • 举报
回复
引用 26 楼 -一个大坑 的回复:
[quote=引用 25 楼 Hello World, 的回复:]
不知道你的代码怎么写的,这边测试是可以接收到的。
from的属性:enctype="multipart/form-data"
file控件要有name属性
其他的再检查一下吧

不过还是建议把接收数据有功能独立出来,理由上面大家都说了

改了一下,Page_Load可以接收到了
但是如果用ashx要怎么接收?var aa= context.Request.Files; 没接收到
我现在是把文件转成二进制传到后台的[/quote]





可以接收到的,把url改成ashx文件地址就可以了
stevenjin 2018-12-05
  • 打赏
  • 举报
回复
你自己的方法中,ajax的参数名要与后台方法中的一致
-一个大坑 2018-12-05
  • 打赏
  • 举报
回复
ashx的url是不能加方法名
  • 打赏
  • 举报
回复
asp.net webform 中有 ashx(最基本的“一般处理程序”概念)、webservice、wcf、webapi 等等许多种 http 数据服务程序模式,你难道一个都没有学过?
  • 打赏
  • 举报
回复
编程设计需要从一开始就有根据。如果有一意孤行的习惯,最终往往是靠背信弃义的方式来对待开发。
  • 打赏
  • 举报
回复
一个数据(命令)服务,根本不是刷新页面,为什么要访问页面视图?这首先从概念上就是错误的。 就算是页面本身有混淆视听的代码(例如明明花了巨大性能代价来解析页面控件并输出页面内容,但是却用 Response.End 来废弃了自己的页面输出),那么你也要先学会 asp.net 页面机制再来设计前端访问。你写的
formData.aspx/UploadExcel
这样的地址怎么可能不加载和创建 Page 对象?怎么可能不执行 Form_Load 代码?怎么会跑到什么 UploadExcel 方法里呢?如果学过点 asp.net 的人应该从学过的真正的编程知识出发,而不是从自己的空想出发来编程。
-一个大坑 2018-12-04
  • 打赏
  • 举报
回复
引用 10 楼 Hello World, 的回复:
在page_load里面去加一个判断,看看有没有文件传过来,有就处理,没有就不处理:

前端:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="formData.aspx.cs" Inherits="AJAX_TEST_formData" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<form id="FileUpload" enctype="multipart/form-data" method="post">
<div>
<input id="File1" name="File1" type="file" />
<input type="button" value="submit" id="btnUpload" />
</div>
</form>
</body>
</html>
<script src="../JS/jquery-1.11.1.js"></script>
<script>
$(document).on('click', '#btnUpload', function () {
var formData = new FormData(document.getElementById('FileUpload'));

$.ajax({
type: 'post',
url: 'formData.aspx/UploadExcel',
data: formData,
cache: false,
processData: false,//用于对data参数进行序列化处理 这里必须false
contentType: false,// "application/json; charset=utf-8", //必须
success: function (data) {
alert(data)
},
error: function (err) {
alert('發生錯誤,請聯繫IT!');
}
})
})
</script>


这样会不会刷新页面,我不想刷新页面
-一个大坑 2018-12-04
  • 打赏
  • 举报
回复
引用 7 楼 以专业开发人员为伍 的回复:
[quote=引用 楼主 -一个大坑 的回复:]
本来应该进入WH05.aspx下UploadExcel,但是后台打断点进不去,每次进的Page_Load


没听说过进入 UploadExcel 的啊。这是 webform 并不是 webApi,你是不是搞错了名词儿?建议你看 webform 的教程,而不是 webapi 的。如果是 webapi 那么你要按照 wbapi 的来设计,而不是按照 webform 页面设计。如果是 ashx 那么你要按照 ashx 来设计,而不是 webapi 来设计。[/quote]
刚开始用<%=XXXX()%>,后来看到说传参用ajax好些。
改用ajax后,网上搜的方法有几种,我选的通过WebMethod的静态方法,这种url可以是xxx.aspx/方法名
我试一下只传网址,在Page_Load用取传参判断调用方法看看
Hello World, 2018-12-04
  • 打赏
  • 举报
回复
Hello World, 2018-12-04
  • 打赏
  • 举报
回复
另外,url后面加动作路径是可以的:


Hello World, 2018-12-04
  • 打赏
  • 举报
回复
在page_load里面去加一个判断,看看有没有文件传过来,有就处理,没有就不处理:

前端:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="formData.aspx.cs" Inherits="AJAX_TEST_formData" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<form id="FileUpload" enctype="multipart/form-data" method="post">
<div>
<input id="File1" name="File1" type="file" />
<input type="button" value="submit" id="btnUpload" />
</div>
</form>
</body>
</html>
<script src="../JS/jquery-1.11.1.js"></script>
<script>
$(document).on('click', '#btnUpload', function () {
var formData = new FormData(document.getElementById('FileUpload'));

$.ajax({
type: 'post',
url: 'formData.aspx/UploadExcel',
data: formData,
cache: false,
processData: false,//用于对data参数进行序列化处理 这里必须false
contentType: false,// "application/json; charset=utf-8", //必须
success: function (data) {
alert(data)
},
error: function (err) {
alert('發生錯誤,請聯繫IT!');
}
})
})
</script>

编程有钱人了 2018-12-04
  • 打赏
  • 举报
回复
url: 'WH05.aspx
lileCAO 2018-12-04
  • 打赏
  • 举报
回复
本来应该进入WH05.aspx下UploadExcel,但是后台打断点进不去,每次进的Page_Load
-一个大坑 2018-12-04
  • 打赏
  • 举报
回复
引用 25 楼 Hello World, 的回复:
不知道你的代码怎么写的,这边测试是可以接收到的。
from的属性:enctype="multipart/form-data"
file控件要有name属性
其他的再检查一下吧

不过还是建议把接收数据有功能独立出来,理由上面大家都说了

改了一下,Page_Load可以接收到了
但是如果用ashx要怎么接收?var aa= context.Request.Files; 没接收到
我现在是把文件转成二进制传到后台的
Hello World, 2018-12-04
  • 打赏
  • 举报
回复
引用 23 楼 -一个大坑 的回复:
[quote=引用 22 楼 Hello World, 的回复:]
不会刷新页面,并且通过“formData.aspx/UploadExcel”的方式来访问也不会进入到page_load方法,自己试一下就知道了

测试了,是没有刷新页面,但是我后台还是接受不到数据
var aa = Request.Files;
var bb = Request["objExcel"];
两个都没接收到[/quote]
不知道你的代码怎么写的,这边测试是可以接收到的。
from的属性:enctype="multipart/form-data"
file控件要有name属性
其他的再检查一下吧

不过还是建议把接收数据有功能独立出来,理由上面大家都说了
  • 打赏
  • 举报
回复
这传参 你用Json传呢? 你这只有value 没有Key啊。 Data:{filelist : formdata}
-一个大坑 2018-12-04
  • 打赏
  • 举报
回复
引用 22 楼 Hello World, 的回复:
不会刷新页面,并且通过“formData.aspx/UploadExcel”的方式来访问也不会进入到page_load方法,自己试一下就知道了

测试了,是没有刷新页面,但是我后台还是接受不到数据
var aa = Request.Files;
var bb = Request["objExcel"];
两个都没接收到
Hello World, 2018-12-04
  • 打赏
  • 举报
回复
引用 14 楼 -一个大坑 的回复:
[quote=引用 10 楼 Hello World, 的回复:]
在page_load里面去加一个判断,看看有没有文件传过来,有就处理,没有就不处理:

前端:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="formData.aspx.cs" Inherits="AJAX_TEST_formData" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<form id="FileUpload" enctype="multipart/form-data" method="post">
<div>
<input id="File1" name="File1" type="file" />
<input type="button" value="submit" id="btnUpload" />
</div>
</form>
</body>
</html>
<script src="../JS/jquery-1.11.1.js"></script>
<script>
$(document).on('click', '#btnUpload', function () {
var formData = new FormData(document.getElementById('FileUpload'));

$.ajax({
type: 'post',
url: 'formData.aspx/UploadExcel',
data: formData,
cache: false,
processData: false,//用于对data参数进行序列化处理 这里必须false
contentType: false,// "application/json; charset=utf-8", //必须
success: function (data) {
alert(data)
},
error: function (err) {
alert('發生錯誤,請聯繫IT!');
}
})
})
</script>


这样会不会刷新页面,我不想刷新页面[/quote]
不会刷新页面,并且通过“formData.aspx/UploadExcel”的方式来访问也不会进入到page_load方法,自己试一下就知道了
clever_yang 2018-12-04
  • 打赏
  • 举报
回复
上传文件,建议不要用页面视图,这种有PAGE 的生命周期,很费性能,建议使用数据服务程序模式处理,就像楼上索索的WEBAPI,ASHX等等之类的。
加载更多回复(9)

62,242

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧