【问题标题】:How to upload a file to an ASP.NET MVC controller action without using JS FormData如何在不使用 JS FormData 的情况下将文件上传到 ASP.NET MVC 控制器操作
【发布时间】:2017-11-27 01:51:45
【问题描述】:

我有一个类似的端点

    public ActionResult Create(int? projectId = null)
    {
        if (!projectId.HasValue)
        {
            throw new ArgumentException(nameof(projectId));
        }

        // ... 

        return this.View(model); 
   }

它将model 传递到一个名为Create.cshtml 的视图中,并在从另一个视图中单击该页面时呈现该页面

<a href="@Url.Action("Create", new { projectId = ViewBag.ProjectId })" class="btn btn-link">
    <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Project    </a>

问题是我想要另一个可以点击同一端点并上传文件的按钮。我有

<form id="branch-config">
    <input type="file" name="json" />
    <button type="submit" class="btn btn-link">
        <span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Project Using Config
    </button>
</form>
<script>
    $(document).ready(function () {
        //form Submit action
        $("#branch-config").submit(function (evt) {
            evt.preventDefault();
            var formData = new FormData($(this)[0]);
            $.ajax({
                url: "@Url.Action("Import", new { projectId = ViewBag.ProjectId })",
                type: 'GET',
                data: formData,
                async: true,
                cache: false,
                contentType: false,
                enctype: 'multipart/form-data',
                processData: false
            });
            return false;
        });
    });
</script>

它成功上传了文件,但是return this.View(model) 只是在响应中返回视图但不导航到页面,可以这么说。我尝试创建一个不同的端点并执行this.RedirectToAction("Create", new { projectId = projectId }),但发生了同样的问题。知道如何在使用 AJAX/jQuery 和上传文件时实际导航到我的 /Create 页面,还是有其他方法?

【问题讨论】:

  • Ajax 调用从不重定向(它们的全部意义在于保持在同一页面中)。只需对单独的控制器方法进行正常提交,然后使用 return RedirectToAction() 在该 POST 方法中重定向
  • 但是如果您已经在Create.cshtml 视图中,那么重定向相同视图的意义何在?
  • 做一个普通的表单提交并从你的 http post action 做一个重定向

标签: javascript c# asp.net ajax asp.net-mvc


【解决方案1】:

我认为你需要这样的东西

[HttpPost]
public JsonResult Create(int projectId)
{
    // your code here
}

您可以查看一些链接以证明该想法 http://ajeeshms.in/articles/upload-files-using-ajax-in-asp-net-mvc/ https://forums.asp.net/t/2024764.aspx?Passing+form+data+to+a+controller+method+using+Ajax

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2016-12-06
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2011-04-09
    • 1970-01-01
    • 2022-10-15
    相关资源
    最近更新 更多