zoukankan      html  css  js  c++  java
  • 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({})

  • 相关阅读:
    1-13Object类之toString方法
    jvm源码解读--16 锁_开头
    jvm源码解读--16 cas 用法解析
    jvm源码解读--15 oop对象详解
    jvm源码解读--14 defNewGeneration.cpp gc标记复制之后,进行空间清理
    jvm源码解读--13 gc_root中的栈中oop的mark 和copy 过程分析
    Error: Could not find or load main class ***
    使用javah 给.class类编译jni_helloworld.h文件头
    jvm源码解读--12 invokspecial指令的解读
    jvm源码解读--11 ldc指令的解读
  • 原文地址:https://www.cnblogs.com/holyson/p/4884548.html
Copyright © 2011-2022 走看看