MVC 5.0(or5.0↓) Ajax.BeginForm 异步上传附件问题,答案是不能的!
2015-10-16 10:26
399 查看
MVC5.0(or5.0↓)Ajax.BeginForm异步上传附件问题,答案是不能的!
(请注意我这里说的异步!)
来看一下下面这段一步提交file的代码
publicstringupLoadAsync()
{
HttpPostedFileBasefile=Request.Files["Upload"];
HttpPostedFileBasefile=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({});这个方法异步提交表单并且上传文件。
<formid="formID"method="post"enctype="multipart/form-data">
@Html.Hidden("yearNow1",@ViewBag.yearNowasstring)//输入一些要提交表单的值
<inputtype="file"id="fileupload"name="Upload"/>
<inputtype="button"value="上传"id="btn">//这里用button代替submit
</form>
<scripttype="text/javascript">
publicstringupLoadAsync()
{
HttpPostedFileBasefile=Request.Files["Upload"];
HttpPostedFileBasefile=Request.Files[0];
//其余代码省略
//......
}
当debug到这里,你们就发现不管是Request.Files["Upload"]亦或是Request.Files[0]都可以取到文件流。
当controller返回值也可以成功进入seccess方法中。
请注意我代码中标红的位置,以防遗漏导致一直debug无果问题!
总结一下:
1、MV55.0中异步提交表单方法两种:Ajax.BeginForm(newAjaxOptions:post)和$("#formID").ajaxSubmit({})
2、MVC5.0中异步提交表单上传文件一种:$("#formID").ajaxSubmit({})
(请注意我这里说的异步!)
来看一下下面这段一步提交file的代码
//前台.cshtml文件 <scriptsrc="~/jquery.unobtrusive-ajax.js"></script> @using(Ajax.BeginForm("upLoadAsync","UploadFile", newAjaxOptions{ HttpMethod="Post", OnSuccess="success" } ,new{enctype="multipart/form-data"} )) { <inputtype="file"id="fileupload"name="Upload"/> <inputtype="submit"value="上传"id="btn"> } //C#代码
publicstringupLoadAsync()
{
HttpPostedFileBasefile=Request.Files["Upload"];
HttpPostedFileBasefile=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文件
<scriptsrc="~/jquery.form.js"></script>
<formid="formID"method="post"enctype="multipart/form-data">
@Html.Hidden("yearNow1",@ViewBag.yearNowasstring)//输入一些要提交表单的值
<inputtype="file"id="fileupload"name="Upload"/>
<inputtype="button"value="上传"id="btn">//这里用button代替submit
</form>
<scripttype="text/javascript">
$("#btn").click(function(){ $("#formID").ajaxSubmit({ url:"@Url.Action("upLoadAsync","UploadFile")", type:"post", success:function(data){ //...... }, error:function(aa){ alert(aa); } }); });
//C#代码
publicstringupLoadAsync()
{
HttpPostedFileBasefile=Request.Files["Upload"];
HttpPostedFileBasefile=Request.Files[0];
//其余代码省略
//......
}
当debug到这里,你们就发现不管是Request.Files["Upload"]亦或是Request.Files[0]都可以取到文件流。
当controller返回值也可以成功进入seccess方法中。
请注意我代码中标红的位置,以防遗漏导致一直debug无果问题!
总结一下:
1、MV55.0中异步提交表单方法两种:Ajax.BeginForm(newAjaxOptions:post)和$("#formID").ajaxSubmit({})
2、MVC5.0中异步提交表单上传文件一种:$("#formID").ajaxSubmit({})
相关文章推荐
- 如何比较代码框架?
- asp.net的加密解密技巧
- 9月国内网民地域分布TOP12:湖南与上海排名互换
- jquery EasyUI 心得--------2 datagrid中混用渲染方式引出的bug带给我的反思
- stat用法:获取文件对应权限的数字
- stat用法:获取文件对应权限的数字
- TCP与UDP协议
- android 界面控件的使用
- Oracle 10g RAC TAF介绍
- 所有界面锁定屏幕方向,某一个界面支持屏幕旋转~
- 【Android学习笔记】 画图
- Google translate API 调用方法
- struts2的namespace
- shell中可能经常能看到:>/dev/null 2>&1
- jsp中的简单文件上传
- eclipse 方便快捷安装svn
- 粒子生物学【经济学人】
- 解决:对 PInvoke 函数的调用导致堆栈不对称问题
- OgreSDK_Android_v1-9-0RC1 --Android 环境搭建
- FineReport——函数