AJAX вызов для контроллера, чтобы получить количество страниц в MVC - PullRequest
0 голосов
/ 07 февраля 2019

Мне нужно получить количество страниц загруженного PDF-документа.Нажатие кнопки работает, но не соответствует методу контроллера.

My View:

<div class="form-group">
            <input type="file" id="fileupload" accept="application/pdf" />
            <button type="button" onclick="pagecount()">Upload</button> 

        @Html.Label("Number Of Pages", htmlAttributes: new { @class = "control-label col-md-2" })
        @ViewBag.pageCount
</div>

Вот мой сценарий ajax:

 $(document).ready(function (e) {var frmData = null;
        function pagecount() {
            frmData = new FormData();
            var totalFiles = document.getElementById("fileupload").files.length;
            var file = document.getElementById("fileupload").files[0];
            frmData.append("fileupload", file);
            $.ajax({
                url: '/ProductAPI/PageCount@*@Url.Action("PageCount", "ProductAPI")*@',
                data: frmData,
                type: 'POST',
                async: true,
                enctype: 'multipart/form-data'
            });
        }
    }); 

Вот мойметод контроллера:

[HttpPost]
public void PageCount(FormCollection formCollection)
{
    var file = Request.Files[0];
    byte[] fileData = new byte[Request.Files[0].ContentLength];
    PdfReader reader = new PdfReader(fileData);
    ViewBag.pageCount = reader.NumberOfPages;
}

1 Ответ

0 голосов
/ 07 февраля 2019

Пожалуйста, обратитесь так, как я.Удалите pageCount() функцию javascript из document.ready(), поскольку вам нужно вызывать ее из внешней области.

добавьте contentType и processData со значением false.Обновленная функция

 function pagecount() {
        frmData = new FormData();
        var totalFiles = document.getElementById("fileupload").files.length;
        var file = document.getElementById("fileupload").files[0];
        frmData.append("fileupload", file);
        $.ajax({
            url: '/ProductAPI/PageCount',
            dataType: "json",
            data:frmData,
            contentType: false,
            processData: false,
            type: 'POST',
            success: function (response) {
                $('#pageCount').html(response);
            },
        });
    }

Вызовите эту функцию JavaScript при нажатии кнопки.

 <button type="button" onclick="javascript:pagecount()">Upload</button> 

В Mvc Action возвращаемое количество страниц в качестве объекта json, как показано ниже

  public JsonResult PageCount()
    {
        var file = Request.Files[0];
        byte[] fileData = new byte[Request.Files[0].ContentLength];
        PdfReader reader = new PdfReader(fileData);

        return Json(reader.NumberOfPages);
    }

Обновление представления в функции успеха ajax

success: function (response) {
            $('#pageCount').html(response);
        },

Это работает для меня:).Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...