首页 新闻 会员 周边

MVC 提交一个file(input type=file),返回的json不能到达页面

0
悬赏园豆:30 [已解决问题] 解决于 2015-05-26 16:36

html:

<formid="mainForm"action="~/E2ENewsAnswerSBSReview/TaskFilesReview"method="post"enctype="multipart/form-data">

<div>     

 <inputtype="file"name="fileInput"/>

<inputtype="submit"id="submit"value="Submit"/>

<inputtype="button"id="btnGo"value="GO"/>

</div>      

<divid="messageBox">

</div></form>

 

button 提交

$("#btnGo").click(function () {

 

                alert("hello~ world!");

                $.ajax({

url:

"TaskFilesReview",

type:

"post",

                    datatype:

"JSON",

                    data: $(

"#mainForm").serialize(),

                    timeout: 600000,

                    success:

function (data) {

//data.Message = data.Message.replace(/(?:\r\n|\r|\n)/g, '<br />');                    

if (data.Success) {

                            alert("Upload data success!");

                        }

else {       result.errorFree =false;

                        }

                    },

                    error:

function (request, status, error) {

                        $(

"#messageBox").text(request.responseText).css({ "color": "red" });

 

                        result.errorFree =

 

 

 

false;

 

                    }

 

                });

 

            })

 

submit 提交:

$(

 

"#submit").click(function () {

           

 

if (toValid()) {

                $(

 

"#messageBox").text("");

                $.ajax({

url:

 

this.action,

type:

 

this.method,

                    datatype:

 

"JSON",

                    data: $(

 

"#mainForm").serialize(),

                    timeout: 600000,

                    success:

 

function (data) {

                       

 

//data.Message = data.Message.replace(/(?:\r\n|\r|\n)/g, '<br />');

                       

 

if (data.Success) {

                            alert(

 

"Upload data success!");

                        }

 

else {

                            result.errorFree =

 

false;

                        }

                    },

                    error:

 

function (request, status, error) {

                        $(

 

"#messageBox").text(request.responseText).css({ "color": "red" });

                        result.errorFree =

 

false;

                    }

                });

            }

        })

后台:

publicActionResult TaskFilesReview()

        {

           

 

var ret = newActionReturn();

           

 

//var ret = new JsonResult();

           

 

string tempPath = System.AppDomain.CurrentDomain.BaseDirectory;

           

 

try

            {

               

 

HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;

               

 

if (files.Count <= 0)

                   

 

thrownewArgumentException("It's no file!~");

               

 

else

                {

                   

 

string fileName = files[0].FileName;

                    System.IO.

 

Stream stream = files[0].InputStream;

                    files[0].SaveAs(tempPath +

 

"\\" + fileName);

                   

 

string dataFilePath = Path.Combine(tempPath, fileName);

                   

 

if (!System.IO.File.Exists(dataFilePath)) thrownewArgumentException("file not exist", dataFilePath);

                   

 

var columnNamedTsv = ColumnNamedTsv.CreateFromFile(dataFilePath);

                   

 

var e2eTaskLineList = E2ENewsAnswerSBSParser(columnNamedTsv);

                   

 

//ret.Success = true;

                    ret.Data = e2eTaskLineList;

                    System.IO.

 

File.Delete(dataFilePath);

                }

            }

           

 

catch (Exception e)

            {

               

 

//ret.Success = false;

                ret.Message = e.ToString() +

 

"--Review failed~~";

               

 

thrownewArgumentException("error occurred:"+e);

            }

           

 

return Json(ret, JsonRequestBehavior.AllowGet);

        }

 

 

 

 

 

肖恩部落的主页 肖恩部落 | 小虾三级 | 园豆:585
提问于:2015-05-19 11:26
< >
分享
最佳答案
0

用浏览器的开发人员工具看一下服务端的响应是什么?

收获园豆:18
dudu | 高人七级 |园豆:31007 | 2015-05-19 11:34

服务端已经完成了对我的file 操作,也生成了json,就在我return json(ret,XXXbehavior)之后就没有回到我的提交页面 

肖恩部落 | 园豆:585 (小虾三级) | 2015-05-19 18:25

@来杯咖啡: 服务器返回给浏览器的Content-Type是什么?

dudu | 园豆:31007 (高人七级) | 2015-05-19 18:30

@dudu: Text

肖恩部落 | 园豆:585 (小虾三级) | 2015-05-20 10:10

@来杯咖啡: $.ajax中指定的是 datatype: "JSON" ,两者对不上

dudu | 园豆:31007 (高人七级) | 2015-05-20 10:19

@dudu: 好的,我试试。不过因为进度关系,我现在换了一种方法,就是使用ViewBag.Result存储,页面再去读取。

肖恩部落 | 园豆:585 (小虾三级) | 2015-05-20 18:28
其他回答(6)
0

你咋知道的不能返回页面?

收获园豆:12
爱编程的大叔 | 园豆:30839 (高人七级) | 2015-05-19 12:10

因为 我是ajax提交后,无论返回的成功失败,都有处理,但是这边没有效果,只是将json直接在浏览器打开,而不是回到我原来提交的页面。 

支持(0) 反对(0) 肖恩部落 | 园豆:585 (小虾三级) | 2015-05-19 18:24

@来杯咖啡: 

public ActionResult TaskFilesReview

好久没写MVC了,抄了一段英文,不知道对不对,你看看吧。

Use JsonResult when you want to return raw JSON data to be consumed by a client (javascript on a web page or a mobile client).

Use ActionResult if you want to return a view, redirect etc to be handled by a browser.

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2015-05-20 16:21

那应该是 ActionResult,我想return 一个View,把我处理后的data display 出来。

支持(0) 反对(0) 肖恩部落 | 园豆:585 (小虾三级) | 2015-05-20 18:31

@来杯咖啡: 那我能说啥呢。

虽然你觉得是ActionResult,试试JsonResult好像世界也不会毁灭吧。

 

不懂原理的时候,其实可以用试错的方法来做对事情的。

做着做着也就懂了。

 

你到底想AJAX还是不想AJAX呢?

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2015-05-20 18:57

@爱编程的大叔:对不起,上头催进度所以思路很乱,马上我试试,谢谢您指教。

支持(0) 反对(0) 肖恩部落 | 园豆:585 (小虾三级) | 2015-05-20 19:10
0

是不是上传文件太大,超时了

铁手三郎 | 园豆:311 (菜鸟二级) | 2015-05-19 15:32

没有超时,file已经得到了 也已经处理完了。

支持(0) 反对(0) 肖恩部落 | 园豆:585 (小虾三级) | 2015-05-19 18:26
0

抓个包 看看,或者在后台设个断点

紫系流月 | 园豆:202 (菜鸟二级) | 2015-05-19 17:49

这边js 是嵌入在html页面的,断点停不下来~~~

支持(0) 反对(0) 肖恩部落 | 园豆:585 (小虾三级) | 2015-05-19 18:26
0

抓包吧。 断点停不下来就用开发者工具。

请叫我头头哥 | 园豆:9382 (大侠五级) | 2015-05-19 22:36
0

说一个比较不沾边的话 你发布的代码能不能稍微格式化整理下,一眼搂过去,给人太凌乱的感觉

隔壁老王来了 | 园豆:99 (初学一级) | 2015-05-20 10:23

对不起,有点冲忙,赶进度。以后会注意。

支持(0) 反对(0) 肖恩部落 | 园豆:585 (小虾三级) | 2015-05-20 18:29
0

看看处理文件上传Action的返回值是不是有问题,加上断点调试下就知道。

mczxmin | 园豆:196 (初学一级) | 2015-05-20 11:54

返回值 没有问题,是不是form的post 提交方式不能 使用json 返回原来的page呢?

支持(0) 反对(0) 肖恩部落 | 园豆:585 (小虾三级) | 2015-05-20 18:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册