Sunny_Kumar_ Ответов: 2

проблема асинхронной загрузки файла с помощью Ajax.BeginForm()


Всем Привет,

Я пытаюсь загрузить файл с помощью Ajax.BeginForm (), но это не работает.

Мой Взгляд Содержит:
@using (Ajax.BeginForm("UploadFile", null, new AjaxOptions { HttpMethod="POST", UpdateTargetId = "result" }, new { enctype = "multipart/form-data" }))
{         
  <label id="lblUploadNewFile" for="fileUploadControl">Upload New File</label>     
  <input type="file" name="fileToUpload" id="fileUploadControl"/>
  <input id="btnFileUpload" type="submit" value="Upload" />
  <span id="result" />            
}

и соответствующий контроллер есть:
[HttpPost]
public string UploadFile(FormCollection formData)
{
  HttpPostedFileBase file=null;
  try
  {
   file = Request.Files[0];
  }
  catch { }

  if ( file!=null && file.ContentLength > 0)
    {
     file.SaveAs(string.Concat(AppDomain.CurrentDomain.BaseDirectory, Path.GetFileName(file.FileName)));
     return "Successfully Uploaded";
    }
  else
    {
      return "Upload Failed, please try again.";
    }

  }



теперь проблема в том, что он загружает файл, но не делает асинхронный, когда я удаляю его "jquery.unobtrusive-ajax.js- ...Он делает полный обратный отсчет. Когда я добавляю "jquery.unobtrusive-ajax.js"это, на мой взгляд, делает асинхронно, но не отправляет файл загрузки в виде данных. Ни один файл не отправляется на сервер в Запрос.Файлы[].

Кто-нибудь, пожалуйста, помогите.

Заранее большое спасибо!
-Солнечный.

2 Ответов

Рейтинг:
1

Member 2374010

Я наткнулся на этот маленький хак, который решает проблему отсутствия файлов для Ajax.BeginForm представления:

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);


Найдено @ http://www.acnenomor.com/1762557p1/c-mvc3-ajaxbeginform-to-upload-file-not-working


Jijutj

Есть ли способ проверить тип файла и выдать ошибку с помощью этого кода?

Рейтинг:
1

Anupam Singh

Используйте HttpPostedFileBase вместо FormCollaction.