c#MVC3 ajax.beginform上传文件无法正常工作

man*_*ore 2 asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

单击"提交"按钮后.我在实体中变为空. 有人有解决方案吗?

视图

    @using (Ajax.BeginForm("CreateRoom", "Room", new AjaxOptions { HttpMethod = "POST", OnComplete = "window.location.href='Index'" }, new { enctype = "multipart/form-data", id = "ajaxUploadForm" }))
    {
        <input type="file" name="Room" />
        <input type="submit" value="OK" />
    }
Run Code Online (Sandbox Code Playgroud)

调节器

    [HttpPost]
    public ActionResult CreateRoom(RoomFileView entity)
    {
        //code
    }
Run Code Online (Sandbox Code Playgroud)

模型

     public class RoomFileView
    {
        public RoomFileView();

        public int BuildingId { get; set; }
        public int CityId { get; set; }
        public int CountryId { get; set; }
        public int FloorId { get; set; }
        public int LocationId { get; set; }
        public HttpPostedFileWrapper Room { get; set; }

        public string Content();
    }
Run Code Online (Sandbox Code Playgroud)

Ale*_*sey 8

我写了一个小黑客.它在大多数浏览器中都能正常工作,但IE中不支持FormData对象.您可以将此代码添加到自定义js文件或html页面.

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);
Run Code Online (Sandbox Code Playgroud)


小智 5

您无法使用AJAX上传文件.使用正式的Html.BeginForm.请查看此链接点击此处,因为这对您有所帮助.

如果要使用异步上载,可以尝试一些可用的上载组件,例如Ajax Upload和Uploadify.