MVC 5.0(or5.0↓) Ajax.BeginForm 异步上传附件问题,答案是不能的!
MVC 5.0(or5.0↓) Ajax.BeginForm 异步上传附件问题,答案是不能的!
(请注意我这里说的异步!)
来看一下下面这段一步提交file的代码
//前台 .cshtml 文件 <script src="~/jquery.unobtrusive-ajax.js"></script>
@using (Ajax.BeginForm("upLoadAsync", "UploadFile",
new AjaxOptions {
HttpMethod = "Post",
OnSuccess = "success"
}
, new { enctype = "multipart/form-data" }
))
{
<input type="file" id="fileupload" name="Upload" />
<input type="submit" value="上传" id="btn">
} //C#代码
public string upLoadAsync()
{
HttpPostedFileBase file = Request.Files["Upload"];
HttpPostedFileBase file = Request.Files[0];
//其余代码省略
//......
}
当debug到这里,你们就发现不管是 Request.Files["Upload"]亦或是 Request.Files[0] 都不会取到文件流。
这就是我要说的,当使用Ajax.BeginForm(jquery.unobtrusive-ajax.js) 异步上传是不可行的,因为文件流不会被C#代码读取
但是并不影响 Ajax.BeginForm(jquery.unobtrusive-ajax.js) 异步提交表单的特性。
那我我们应该如何异步提交表单呢?
利用 $("#formID").ajaxSubmit({});这个方法异步提交表单并且上传文件。
//前台 .cshtml 文件
<script src="~/jquery.form.js"></script>
<form id="formID" method="post" enctype="multipart/form-data">
@Html.Hidden("yearNow1", @ViewBag.yearNow as string)//输入一些要提交表单的值
<input type="file" id="fileupload" name="Upload" />
<input type="button" value="上传" id="btn">//这里用button代替submit
</form>
<script type="text/javascript">
$("#btn").click(function () {
$("#formID").ajaxSubmit({
url: "@Url.Action("upLoadAsync", "UploadFile")",
type: "post",
success: function (data) {
//......
},
error: function (aa) {
alert(aa);
}
});
});
//C#代码
public string upLoadAsync()
{
HttpPostedFileBase file = Request.Files["Upload"];
HttpPostedFileBase file = Request.Files[0];
//其余代码省略
//......
}
当debug到这里,你们就发现不管是 Request.Files["Upload"]亦或是 Request.Files[0] 都可以取到文件流。
当controller返回值也可以成功进入seccess方法中。
请注意我代码中标红的位置,以防遗漏导致一直debug无果问题!
总结一下:
1、MV5 5.0中异步提交表单方法两种:Ajax.BeginForm(new AjaxOptions:post) 和 $("#formID").ajaxSubmit({})
2、MVC 5.0中异步提交表单上传文件一种:$("#formID").ajaxSubmit({})
MVC 5.0(or5.0↓) Ajax.BeginForm 异步上传附件问题,答案是不能的!的更多相关文章
- Ajax.BeginForm 异步上传附件 替代方案
一:问题描述 含有文件信息表单内容,想通过异步上传到服务器,但是使用Ajax.BeginForm上传时,后台无法获取文件信息 二:解决方案 通过 $.ajaxFileUpload 可以实现文件及 ...
- 关于MVC Ajax.BeginForm()异步上传文件的问题
问题描述: 如果用juqery原生的异步上传方式,只要如下方法即可 $.ajax({ type: "GET", url: "test.json", data: ...
- 文件的上传(表单上传和ajax文件异步上传)
项目中用户上传总是少不了的,下面就主要的列举一下表单上传和ajax上传!注意: context.Request.Files不适合对大文件进行操作,下面列举的主要对于小文件上传的处理! 资源下载: 一. ...
- 普通文件的上传(表单上传和ajax文件异步上传)
一.表单上传: html客户端部分: <form action="upload.ashx" method="post" enctype="mul ...
- 文件的上传(1)(表单上传和ajax文件异步上传)
文件的上传(表单上传和ajax文件异步上传) 项目中用户上传总是少不了的,下面就主要的列举一下表单上传和ajax上传!注意: context.Request.Files不适合对大文件进行操作,下面列举 ...
- 使用FormData实现ajax文件异步上传
1.传统的web开发文件上传一般是基于form表单的文件上传,同步的方式,用户体验差,可控性也差 2.异步上传的实现 有以下方式 2.1 借助浏览器插件 一般需要安装一些类似flash的插件 这种方 ...
- jquery 通过ajax FormData 对象上传附件
之前上传附件都是用插件,或者用form表单体检(这个是很久以前的方式了),今天突发奇想,自己来实现附件上传,具体实现如下 html: <div> 流程图: <input id=& ...
- Ajax图片异步上传并回显
1.jsp页面 <td width="20%" class="pn-flabel pn-flabel-h"></td> <td w ...
- ajaxfileupload异步上传附件添加參数的方法
1.js文件 // JavaScript Document jQuery.extend({ createUploadIframe: function(id, uri) { //create frame ...
随机推荐
- Android必会小功能总结
1.获取屏幕尺寸.密度等信息. 1)最常用的方法: WindowManager windowManager = getWindowManager(); Display display = window ...
- Genymotion——PC上也能玩部落冲突 Clash of Clans
零.前言 部落冲突(Clash of Clans)是手机上一个很不错的联机对战游戏,安卓和iOS平台上都有. 最近玩这个略上瘾,前几天看到部落里有人说用模拟器可以在电脑上玩,就想自己试试. 不想看我啰 ...
- js 当前日期处理 获取
var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份(4位,1 ...
- mac下修改mysql登录密码
mysql版本5.7.9 在mac终端下修改mysql用户登录密码 终端命令如下: update mysql.user set authentication_string=PASSWORD(" ...
- 日历控件table布局
作为初学者,一开始就接触div+css ,所以说实话,我并不怎么喜欢table布局,一般逃避. 先上这次的效果图: 看到这个图,第一次用table布局没实现,原因是给tr加下边框失效.当时没找到原因, ...
- AngularJS尝鲜一
第一个小例子,体验一下: <!DOCTYPE html> <html> <head> <title>Index</title> </h ...
- C# tostring 格式化输出 (转)
C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025 E 科学型 25000.ToString ...
- mysql中权限参数说明
1 授权表范围列的大小写敏感性+--------------+-----+-----+---------+----+-----------+------------+| 列 |Ho ...
- 集合类学习之Hashmap机制研究
1.遍历的两种实现方法 //新建 Map map=new HashMap(); //存储值 map.put() ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 //遍历方式 ...
- Cocos2d-x坐标系介绍
在图形图像和游戏应用开发中坐标系是非常重要的,我们在Android和iOS等平台应用开发的时候使用的二维坐标系它的原点是在左上角的.而在Cocos2d-x坐标系中它原点是在左下角的,而且Cocos2d ...