【问题标题】:Can't get callback from HTTP method in controller无法从控制器中的 HTTP 方法获取回调
【发布时间】:2018-05-01 11:49:20
【问题描述】:

我正忙于为上传文件创建等待指示器,但似乎我无法从控制器中触发的 POST 方法接收任何回调。我一直在寻找半天并尝试了很多不同的解决方案,但它们似乎都不适用于我的情况。

我有一个模型:

public class FileUploadModel
{
    [Required(ErrorMessage = "Select file(s) to upload.")]
    [Display(Name = "Browse")]
    public HttpPostedFileBase[] Files { get; set; }

    [Display(Name = "File Type")]
    public EFileType FileType{ get; set; }
}

我有一个表格:

@using (Html.BeginForm("FileExchange", "General", FormMethod.Post, new { enctype = "multipart/form-data", id = "uploadform" }))

控制器中的方法:

[HttpPost]
public async Task<ActionResult> FileExchange(FileUploadModel model)
{
    await UploadFiles(model);
    return View("FileExchange");
}

我在 javascript/ajax 中尝试过类似以下的内容:

<script>
    $(document).ready(function () {
        $("#preloader").hide(); //the wait indicator
        $('#uploadform').on('submit', function (e) {
            e.preventDefault();

            var formdata = new FormData($('#uploadform').get(0));

            $("#preloader").show();

            var url = '@Url.Content("~/General/FileExchange/")'
            //var dataModel = $(this).serialize();
            $.ajax({
                url: url,
                type: "POST",
                data: formdata,
                processData: false,
                contentType: false,
                //dataType: "json",
                success: function (resp) {
                    $("#preloader").hide();
                },
                error: function (resp) {
                    $("#preloader").hide();
                }
            });
        });
    })
</script>

等待指示器正在工作,但方法没有被命中。

当我将模型添加到“提交”功能时:

$('#uploadform').on('submit', model, function (e)

POST 方法被命中,但等待指示器停止工作。几乎似乎“提交”功能不再受到打击。

关于如何解决此问题的任何想法?

【问题讨论】:

  • $('uploadform') 是查找标签 &lt;uploadForm&gt; 的无效选择器。 id 应该是$('#uploadform')。由于在该表单的内部提交处理程序中可以执行var formdata = new FormData(this);
  • 修复了选择器,没有任何改变。也试过var formdata = new FormData(this); POST 方法没有被命中。
  • 从表单中删除 "FileExchange", "General", FormMethod.Post, 也无济于事。控制器中的 POST 方法被命中,但文件未正确传递给我的模型。
  • 分解可能存在的问题并逐一解决。我的第一个检查是确保请求肯定会发送到您期望的服务器。我会使用 HTTP 代理来检查流量。
  • 似乎无法通过 ajax 中的文件传递模型。请关闭它。我必须找到一种不同的方式来接收来自控制器的回调以更新等待指示器。

标签: javascript c# ajax razor model-view-controller


【解决方案1】:

我搜索了更长的时间,并找到了解决问题的方法:

<script type="text/javascript">
    $(document).ready(function () {
        $("#preloader").hide();
    })

    $('#uploadform').on('submit', function () {

        $("#preloader").show();

        $('#uploadform').ajaxForm({
            url: '@Url.Content("~/General/FileExchange")',
            dataType: 'json',
            success: function () {
                $("#preloader").hide();
            }
        })
    })
</script>

这样我可以在触发“提交”时显示指示器,并在成功执行给定 URL 的 POST 方法时隐藏指示器。

【讨论】:

    猜你喜欢
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 2018-12-18
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多