powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Передать input type="file" в другой метод.
7 сообщений из 7, страница 1 из 1
Передать input type="file" в другой метод.
    #39493885
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Пытаюсь открыть excle файл.
Стандартно делается так (примерами весь инет заполнен):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
VIEW:
            @using (Html.BeginForm("UploadArray", "RetrieveStores", null, FormMethod.Post, new { enctype = "multipart/form-data" }))
            {
                @Html.AntiForgeryToken()
                @Html.ValidationSummary()

                <div class="form-group">
                    <input type="file" id="dataFile" name="upload" />
                </div>

                <div class="form-group">
                    <input type="submit" value="Upload" class="btn btn-default" />
                </div>
            }

CONTROLLER:
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult UploadArray(HttpPostedFileBase upload)
        {
            if (ModelState.IsValid)
            {
.............................



Мне надо открыть его в модальном окне и потом по желанию пользователя просто передать в другой метод для расчетов, пытаюсь так:
Код: c#
1.
2.
3.
            <a href="@Url.Action("UploadArray", "RetrieveStores", new { upload = "C:\\Users\\&&&\\Desktop\\Копия.xlsx" }, null)" class="modItem btn btn-primary">
                <i class="fa fa-pencil"></i>
            </a>



Основной вопрос такой:
Как передать значение input type="file" в переменную HttpPostedFileBase без использования Html.BeginForm.
...
Рейтинг: 0 / 0
Передать input type="file" в другой метод.
    #39494573
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не совсем понимаю, что значит открыть в модальном окне. про передать не получиться нужна форма и multipart/form-data у формы. то что ты хочешь можно сделать если файл представить как строчку base64, если конечно я понял твой вопрос правильно
...
Рейтинг: 0 / 0
Передать input type="file" в другой метод.
    #39494582
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuне совсем понимаю, что значит открыть в модальном окне. про передать не получиться нужна форма и multipart/form-data у формы. то что ты хочешь можно сделать если файл представить как строчку base64, если конечно я понял твой вопрос правильно

Попробую объяснить.
Пользователям необходима возможность загрузки многомерных данных на время расчета.
После расчета данные не нужны.
Ну я так предполагаю, что у них должна быть возможность открыть Excel файл в браузере.
Потом пустить эти данные в расчет, соответственно передать данные в другой метод контроллера.
Для решения проблемы пытаюсь использовать следующий вариант:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
VIEW
            <form id="fileUpload" action="@Url.Action("UploadArrayCount")" method="POST" enctype="multipart/form-data">
                <input id="fileInput" name="fileInput" type="file" />
                <input type="submit" value="Upload file" id="btnFileUpload" />
            </form>

            <input type="text" placeholder="Нет массива данных" value="@(Session["arrayInfo2"] as string)" disabled>

CONTROLLER:
        [HttpPost]
        public ActionResult UploadArrayCount(HttpPostedFileBase upload)
        {
            // HttpPostedFileBase upload = Request.Files["fileInput"];
            string modelName = Session["ModelName"] as string;

            if (ModelState.IsValid)
            {

                if (upload != null && upload.ContentLength > 0)
                {
                    // ExcelDataReader works with the binary Excel file, so it needs a FileStream
                    // to get started. This is how we avoid dependencies on ACE or Interop:
                    Stream stream = upload.InputStream;

                    // We return the interface, so that
                    IExcelDataReader reader = null;

                    if (upload.FileName.EndsWith(".xls"))
                    {
                        reader = ExcelReaderFactory.CreateBinaryReader(stream);
                    }
                    else if (upload.FileName.EndsWith(".xlsx"))
                    {
                        reader = ExcelReaderFactory.CreateOpenXmlReader(stream);
                    }
                    else
                    {
                        ModelState.AddModelError("File", "This file format is not supported");
                        // return View();
                    }

                    reader.IsFirstRowAsColumnNames = true;

                    DataSet result = reader.AsDataSet();
                    Session["ExcelResult"] = result.Tables[0];

                    reader.Close();

                    Session["arrayInfo2"] = string.Concat("Прочитано ", result.Tables[0].Rows.Count, " строк");

                    return RedirectToAction("Permyakov", "RetrieveStores", new { modelName = modelName });
                }
            }
            return RedirectToAction("Permyakov", "RetrieveStores", new { modelName = modelName });
        }



Ключевые моменты такие:
1) Вместо передачи переменной HttpPostedFileBase я закидываю результат в сессию Session["ExcelResult"] = result.Tables[0]; Далее все манипуляции данными ведутся через Session["ExcelResult"]. Так я думаю решил проблему отображения данных на экране и ввода в другой метод для расчетов.
2) Далее делаю редирект на ту страницу где вызываю этот метод
3) Отображаю информацию на экране для пользователя <input type="text" placeholder="Нет массива данных" value="@(Session["arrayInfo2"] as string)" disabled>

Единственный и самый большой минус этого метода то, что происходит обновление всей страницы.
...
Рейтинг: 0 / 0
Передать input type="file" в другой метод.
    #39494585
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Следующий шагом пытаюсь все это запустить через Ajax:
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
$("#btnFileUpload").click(function () {
    
    var formData = new FormData();
    var file = document.getElementById("fileInput").files[0];
    formData.append("upload", file);
    
    $.ajax({
        url: "/RetrieveStores/UploadArrayCount",
        type: "POST",
        data: formData,
        contentType: false,
        processData: false,
        success: function () {
            alert("URA");
        },
        error: function () {
            alert("Ошибка");
        }
    });


Соответственно надо <input type="button" value="Upload file"


P.S.: Ошибся в первом сообщении и в первом методе надо убрать HttpPostedFileBase upload и раскоментарить строчку которая находиться ниже // HttpPostedFileBase upload = Request.Files["fileInput"];
...
Рейтинг: 0 / 0
Передать input type="file" в другой метод.
    #39494839
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да ты вроде ничего не показываешь кроме кол-ва строк в экселе. ну не суть. я ж говорю передавай как base64 строку через экшен( преобразуешь файл в массив байтов превращаешься в base64 строку, передаешь, а потом назад преобразование строки в байты сделаешь и что хочешь дальше делай)...или либ сохраняй в папку на диск и выдавай имя уникальное и его уже передавай на другую форму чтоб подцепить потом файл. уже 2 варианта

п.с. сессия вот для твоего случая не очень.
...
Рейтинг: 0 / 0
Передать input type="file" в другой метод.
    #39495157
vadipok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuда ты вроде ничего не показываешь кроме кол-ва строк в экселе. ну не суть. я ж говорю передавай как base64 строку через экшен( преобразуешь файл в массив байтов превращаешься в base64 строку, передаешь, а потом назад преобразование строки в байты сделаешь и что хочешь дальше делай)...или либ сохраняй в папку на диск и выдавай имя уникальное и его уже передавай на другую форму чтоб подцепить потом файл. уже 2 варианта

п.с. сессия вот для твоего случая не очень.

Можете привести полноценный пример?
В инете на эту тему что-то совсем скудно написано.
...
Рейтинг: 0 / 0
Передать input type="file" в другой метод.
    #39495215
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadipok,
пример чего? как массив байтов перегнать в строку и передать в другой экшен?
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Передать input type="file" в другой метод.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]