2

送信ボタンをクリックした後。エンティティで null を取得しています。 誰にも解決策がありますか?

意見

    @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" />
    }

コントローラ

    [HttpPost]
    public ActionResult CreateRoom(RoomFileView entity)
    {
        //code
    }

モデル

     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();
    }
4

5 に答える 5

8

私は少しハックを書きました。ほとんどのブラウザーで問題なく動作しますが、FormData オブジェクトは IE ではサポートされていません。このコードをカスタム 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);
于 2014-01-03T21:40:31.470 に答える
5

AJAX を使用してファイルをアップロードすることはできません。正常な Html.BeginForm を使用します。このリンクをクリックしてチェックしてください。これは役に立ちます。

非同期アップロードを使用する場合は、Ajax Upload や Uploadify などの利用可能なアップロード コンポーネントを試してみてください。

于 2013-02-20T06:40:55.567 に答える
0
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);
于 2016-10-25T13:32:57.933 に答える
0

AJAX.Beginform を使用してファイルをアップロードすることはできません。
多くのサードパーティの js コントロールが利用可能です。
しかし、私はそれらがあまり役に立たないと思います。Html.Beginform
を使用するか使用する必要があります<iframe>

于 2013-02-20T11:54:59.690 に答える