当前位置:  开发笔记 > 编程语言 > 正文

如何使用multipart/form-data执行ASP.NET MVC Ajax表单帖子?

如何解决《如何使用multipart/form-data执行ASP.NETMVCAjax表单帖子?》经验,为你挑选了5个好方法。

我正在开发一个ASP.NET MVC网站,该网站的表单允许使用表单标签上的multipart/form data enctype选项上传文件,如此

我怎么写这个来做一个ASP.NET MVC Ajax表单帖子呢?



1> Demian Flavi..:

这是可能的,但这是一个漫长的道路.第1步:写下您的表单

例如:

@using (Ajax.BeginForm(YourMethod, YourController, new { id= Model.Id }, new AjaxOptions {//needed options }, new { enctype = "multipart/form-data" }))
{
    
    
}

第2步:拦截请求并将其发送到服务器


第3步:因为您进行了ajax调用,所以您可能想要替换某些图像或其他内容 multipart/form-data

例如:

handleSuccessFunctionHERE(data)
{
    $.ajax({
        type: "GET",
        url: "/Profile/GetImageModified",
        data: {},
        dataType: "text",
        success: function (MSG) {
            $("#imageUploaded").attr("src", "data:image/gif;base64,"+msg);
        },
        error: function (msg) {
            alert(msg);
        }
    });
}

MSG变量是base64加密字符串.就我而言,它是图像的来源.

通过这种方式,我设法更改了个人资料图片,之后图片立即更新.另外请确保添加Application_Start(global.asax)非常 ValueProviderFactories.Factories.Add(new JsonValueProviderFactory()); 好吗?

PS:此解决方案有效,请不要犹豫,询问更多细节.


添加event.stopPropagation(); 防止它提交两次.
[HttpPost] public ActionResult YourAction(HttpPostedFileBase file){/*save file here*/return RedirectToAction(YourAction); }

2> 小智..:

我遇到了这个小黑客,很好地解决了这个问题

window.addEventListener("submit", function (e) {
    var form = e.target;
    if (form.getAttribute("enctype") === "multipart/form-data") {
        if (form.dataset.ajax) {
            e.preventDefault();
            e.stopImmediatePropagation();
            var xhr = new XMLHttpRequest();
            xhr.open(form.method, form.action);
            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    if (form.dataset.ajaxUpdate) {
                        var updateTarget = document.querySelector(form.dataset.ajaxUpdate);
                        if (updateTarget) {
                            updateTarget.innerHTML = xhr.responseText;
                        } 
                    }
                }
            };
            xhr.send(new FormData(form));
        }
    }
}, true);



3> zihotki..:

    你可以使用一些额外的上传器(例如jQuery多文件上传器)(我更喜欢这种方式,我更喜欢不使用MS Ajax)

    使用:

    AjaxHelper.BeginForm("Post", "Entries", new {id=ViewData.Model.MemberDetermination.DeterminationMemberID}, new AjaxOptions(){/*some options*/}, new {enctype="multipart/form-data"})
    

但在第二种情况下,我不确定它会起作用.


是的请dswatik发布一个例子,因为一切都很好,但我没有在服务器上收到任何图像文件!
是的,也没有文件发送到服务器.
@dswatik - 你能发一个#2的例子吗?我试过了,但无法让它发挥作用.
可以确认第二个例子不起作用...... :(

4> Marc Gravell..:

在jQuery的形式插件支持文件上传这种方式.



5> Karthick Jay..:

我使用的代码可以正常工作!它是@James'Fluffy'Burton解决方案的副本。我只是即兴回答他的问题,以便对MVC陌生的人能够快速理解后果。

以下是我的观点:

@using (Ajax.BeginForm("FileUploader", null, new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "AjaxUpdatePanel" }, new { enctype = "multipart/form-data", id = "frmUploader" })){
}
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有