Загрузка файлов без отправки формы и асинхронно с использованием jQuery и ASP.NET MVC - PullRequest
0 голосов
/ 18 мая 2019

Загрузить-Debugging Справочник по JQuery для главной страницы

У меня есть элемент управления входным файлом на моей странице просмотра asp.net mvc, как показано ниже. Я пытаюсь загрузить файл из представления в контроллер без использования формы и с помощью jQuery ajax.

Я не использую Iframe / FORM на странице просмотра. Данные файла не отправляются в контроллер.

System.Web.HttpContext.Current.Request.Files.Count - всегда отображается как ноль. и $ ("# AttachmenteUploadFile"). get (0) .files также показывает 'undefined' после развертывания в рабочей среде. Что-то я делаю неправильно в моем HTML / JQuery / C #.

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <table id="tableView" border="0">
        <tr>
            <td style="text-align:right;color:black">                   
                <%=LabelHelper.Label("lblFile", "Supplier", "File", Model.User.CultureCode)%>
            </td>
            <td style="text-align:left">
                <input type="file" id="AttachmenteUploadFile" />
                <input type="button" id="btnUploadSubmit" value="Attach Document" />
            </td>
        </tr>             
    </table>
</div>   
</asp:Content>

Вот событие Onclick кнопки JQuery.

$("#btnUploadSubmit").click(function() {
    if (RequiredFieldValidate() != false) {     
    var fileData = new FormData();
    var files = $("#AttachmenteUploadFile").get(0).files;    
    if (FileSizeValidation(filesize) != false) 
    {
        for (var i = 0; i < files.length; i++) {
        fileData.append(files[i].name, files[i]);
    }        
    fileData.append('documentType', $('#ddlDocumentType').val());
    var AttachTypeCode = $('#ddlDocumentType').val();
    $.ajax({
        type: "POST",
        url: getExactPath('/Upload/UploadDocument'),
        data: fileData,
        dataType: 'Json',
        processData: false,
        contentType: false,
        success: function(jsonData) {
            var jsonobj = $.parseJSON(jsonData);
            FillGrid(jsonobj);
        },
        error: function() {
            alert("Unable to upload the Document.");
        }});}}});});

Результат действия контроллера из вызова JQuery.

[HttpPost]
public ActionResult UploadDocument() 
{     
    List < string > mimeType = DocumentumUtil.getMimeTypes();
    if (System.Web.HttpContext.Current.Request.Files.Count > 0)
    {          
        docFullPath = System.Web.HttpContext.Current.Request.Files[0].FileName;
       docFullName = System.Web.HttpContext.Current.Request.Files.AllKeys[0];
       int index = docFullName.LastIndexOf('.');
       docname = docFullName.Substring(0, docFullName.LastIndexOf('.'));
       docExt = docFullName.Substring(index + 1);  
    }  
} catch {
}
return Json(AttachmentDetails, JsonRequestBehavior.AllowGet);
}

кто-нибудь, пожалуйста, помогите. Я застрял. Заранее спасибо.

Обновление: На стороне клиента проблема решена, так как FormData не работает в IE (режим документа 7), я перешел на более высокую версию. Но все же System.Web.HttpContext.Current.Request.Files.Count Я получаю ноль

Ответы [ 2 ]

1 голос
/ 20 мая 2019

добавьте этот атрибут в вашу форму. ENCTYPE = "многочастному / форм-данных" * * тысяча один

и убедитесь, что имя входного файла совпадает с параметром метода действия или свойством класса

0 голосов
/ 18 мая 2019

Место Name Атрибут в дизайне.

<input type="file" id="AttachmenteUploadFile" name="FileUpload_"/>

и проверка один раз.

...