powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / IFormFile - как засунуть назад в <input type="file" />
17 сообщений из 17, страница 1 из 1
IFormFile - как засунуть назад в <input type="file" />
    #39952717
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый,

Господа, нужна ваша помощь.

Ситуация для наглядности есть страница профайл пользователя с 2мя полями: Имя и User Pic.
Пользователь добавил имя и картинку. - Здесь проблем нет.
Пользователь хочет заменить имя. - Здесь проблема.
Пользователю нужно все снова выбирать картинку.

Причина <input asp-for = "UserPic" type = "file" /> - как бы не получает данные из модели, в модели данные 100% есть.
Уверен потому что <img src = "UserPic.ToImage()" /> - отображает картинку

получается что, чтоб поменять имя, нужно обязательно выбрать картинку снова.

Помогите пожалуйста, а то сам что-то не соображу ни как.
Заранее спасибо.
...
Рейтинг: 0 / 0
IFormFile - как засунуть назад в <input type="file" />
    #39952791
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не выбрал картинку, пришло null и не обновляем поле в бд .все ж просто
...
Рейтинг: 0 / 0
IFormFile - как засунуть назад в <input type="file" />
    #39952798
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем G
получается что, чтоб поменять имя, нужно обязательно выбрать картинку снова.


Да, так и получается.
Файлы из модели данных не возвращаются, только обычные поля.


Артем G
Помогите пожалуйста, а то сам что-то не соображу ни как.


Классическим методом отправки формы сохранить выбранный файл не возможно в принципе.

Чтобы форма сохраняла своё состояние, нужно отправлять форму через AJAX.
...
Рейтинг: 0 / 0
IFormFile - как засунуть назад в <input type="file" />
    #39952920
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
handmadeFromRu
не выбрал картинку, пришло null и не обновляем поле в бд .все ж просто


Предположу что вы не поняли то, что я имел ввиду.

В контроллере 2 экшена: Create (все хорошо), Update (проблема)

1ый Update - считывает и отображает данные во вью.
Сама модель данные (IFormFile) содержит.
А <input asp-for = "UserPic" type = "file" /> пустой.

НУЖНО чтобы input заполнялся при считывании. Я понимаю что это нужно сделать с помощью jquery.
Продпологаю что данные мои где то все равно есть, типа в httpcontext.request.form.files
Надеюсь что кто нибудь сможет помочь накидать черновой script.

2ой Update - сохраняет данные.
Сейчас приходиться заново выбирать картинку с помощью <input asp-for = "UserPic" type = "file" /> иначе уходит null.

Код: c#
1.
2.
3.
4.
5.
model
   public Profile {
      public string Name {get;set;}
      public IFormFile UserPic {get;set;}
}
...
Рейтинг: 0 / 0
IFormFile - как засунуть назад в <input type="file" />
    #39952928
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt
Артем G
получается что, чтоб поменять имя, нужно обязательно выбрать картинку снова.


Да, так и получается.
Файлы из модели данных не возвращаются, только обычные поля.


Артем G
Помогите пожалуйста, а то сам что-то не соображу ни как.


Классическим методом отправки формы сохранить выбранный файл не возможно в принципе.

Чтобы форма сохраняла своё состояние, нужно отправлять форму через AJAX.


Все отлично работает. Не заполняется input только в момент считывания. Тут скорее всего нужен jquery добавить данные в input.

<img src="@Model.FormFile.ToImage()" /> - отображает картинку
<input asp-for="UserPic" type="file" - вероятно пустой, при нажатии save уходит null, приходиться картинку выбирать снова, тогда все ОК.

Вот мой пример. Я упрастил код в контроллере и во вью чтоб поднять читаемость.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        [HttpGet]
        public async Task<IActionResult> Update(int? id) <-- Отлично работает
        {
            var model = await service.GetUpdateAsync(id);
            return View(model);
        }
        [HttpPost]
        [ValidateAntiForgeryToken()]
        public async Task<IActionResult> Update(UpdateVm model)  <-- Отлично работает
        {
            await service.UpdateAsync(model);
            return RedirectToAction("List");
        }



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
        @model UpdateVm

        <form asp-antiforgery="true" asp-area="" asp-controller="" asp-action="Update" enctype="multipart/form-data">
            <div class="form-group">
                <button class="btn" type="submit" value="Save">
                    save
                </button>
            </div>
            <div class="form-group">
                       Здесь какие то еще например текстовые поля.
            </div>
            <div class="form-group">
                <label asp-for="UserPic" class="col-form-label"></label>
                <div class="custom-file">
                    <input asp-for="UserPic" type="file" class="form-control custom-file-input"  <-- вся проблема здесь при считывании, не заполняется, если нажать сохранить уйдет null, но если повторно выбрать картинку, то все хорошо сохраняется.
                    <label class="custom-file-label"></label>
                </div>
                <span asp-validation-for="UserPic" class="text-danger"></span>
            </div>
            <div class="form-group">
                <img src="@Model.FormFile.ToImage()" /> <-- Отлично работает, в модели IFormFile UserPic заполнен!
            </div>
        </form>
...
Рейтинг: 0 / 0
IFormFile - как засунуть назад в <input type="file" />
    #39952939
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем G,

..если речь идет об аватаре, т.е. изображении небольшого размера, то можно конвертить его в base64 и гонять туда-сюда, как строку .. костыль, конечно, но может сработать ...
...
Рейтинг: 0 / 0
IFormFile - как засунуть назад в <input type="file" />
    #39952963
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем G
<img src="@Model.FormFile.ToImage()" /> - отображает картинку


а вы понимаете что тут происходит?
почему "отображает картинку"?

когда вы разберётесь, то поймёте, что это плохой вариант.
...
Рейтинг: 0 / 0
IFormFile - как засунуть назад в <input type="file" />
    #39952966
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
carrotik
Артем G,

..если речь идет об аватаре, т.е. изображении небольшого размера, то можно конвертить его в base64 и гонять туда-сюда, как строку .. костыль, конечно, но может сработать ...


изначально так и хотел. там идиотская история с браузерами при выборе картинки.
тестировал изначально на IE и Chrome. В одном указывается полный путь до файла, в другом только имя с расширением, по этой причине не получалось конвертировать в byte[].

+ эта муть требуется не только для картинок, но и для вообще любых файлов, pdf, ms office, zip.

Проект подошел к концу, единственное что осталось вот эта ерунда. За 2 месяца так и не смог найти решения. А потрачено просто тьма времени. Написал здесь только потому что уже выбился из сил.
...
Рейтинг: 0 / 0
IFormFile - как засунуть назад в <input type="file" />
    #39952969
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt
Артем G
<img src="@Model.FormFile.ToImage()" /> - отображает картинку


а вы понимаете что тут происходит?
почему "отображает картинку"?

когда вы разберётесь, то поймёте, что это плохой вариант.


это не продакшен решение. я показываю что модель заполнена.
...
Рейтинг: 0 / 0
IFormFile - как засунуть назад в <input type="file" />
    #39953004
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем G
Проект подошел к концу, единственное что осталось вот эта ерунда. За 2 месяца так и не смог найти решения. А потрачено просто тьма времени. Написал здесь только потому что уже выбился из сил.


Вы сценарий опишите, как это должно работать.
Непонятно до сих пор чего вы хотите, почему из модели пытаетесь файл на генерируемую страницу HTML засунуть, вообще непонятно чего делаете.
...
Рейтинг: 0 / 0
IFormFile - как засунуть назад в <input type="file" />
    #39953032
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt
Артем G
Проект подошел к концу, единственное что осталось вот эта ерунда. За 2 месяца так и не смог найти решения. А потрачено просто тьма времени. Написал здесь только потому что уже выбился из сил.


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


В базе фамилия человека и фото. Пользователь иногда хочет поменять фамилию, а иногда фото.

Есть проблема с фото. Когда открываю страницу для редактирования в поле <input asp-for = "UserPic" type = "file" />
данные null
...
Рейтинг: 0 / 0
IFormFile - как засунуть назад в <input type="file" />
    #39953037
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если гуглить, то все примеры IFormFile на Create, на Update примеров 0!
...
Рейтинг: 0 / 0
IFormFile - как засунуть назад в <input type="file" />
    #39953040
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем G,

Ну так ваша проблема просто сводится к некоторому непониманию как работает веб и стандартные компоненты браузера.

Такой компонент, как <input type="file" /> невозможно заполнить со стороны сервера, так как его задача -- UPLOAD, но не DOWNLOAD или EDIT. Вам тут не поможет ни ASP.NET ни любой другой фреймворк.

Вот типичная упрощённая форма для загрузки/смены фото:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<form ..>

...

<label>Ваше лицо</label>
<img src="http://somesite.ru/profile/my-face.jpg" />

<label>Загрузить другое лицо</label>
<input type="file" />

...

<button type="submit">Сохранить</button>

</form>



Обратите внимание на тег <img> в него подставляется ссылка на файл. На самом деле никакого такого файла нет. На запрос "/profile/my-face.jpg" ваш сервер отдаёт текущее фото пользователя из его профиля. А если фото не загружено, отдаёт заглушку в виде специального изображения "NO PHOTO".

Ну и тут тысячи вариаций как это реализовать, примеров много.
...
Рейтинг: 0 / 0
IFormFile - как засунуть назад в <input type="file" />
    #39953049
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ок, что делать если надо изменить Фамилию, а фото оставить?
поле <input type="file" /> = null

прописывать логику что если <input type="file" /> = null то фото не меняй?
...
Рейтинг: 0 / 0
IFormFile - как засунуть назад в <input type="file" />
    #39953103
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем G
ок, что делать если надо изменить Фамилию, а фото оставить?
поле <input type="file" /> = null

прописывать логику что если <input type="file" /> = null то фото не меняй?

да то что я и писал выше где вы указали что я не понимаю
либ мутить отдельную форму загрузки и на эдите не позволять грузить фото
вариантов уйма
...
Рейтинг: 0 / 0
IFormFile - как засунуть назад в <input type="file" />
    #39953151
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем G
ок, что делать если надо изменить Фамилию, а фото оставить?
поле <input type="file" /> = null

прописывать логику что если <input type="file" /> = null то фото не меняй?


Bingo!
...
Рейтинг: 0 / 0
IFormFile - как засунуть назад в <input type="file" />
    #39953174
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu
Артем G
ок, что делать если надо изменить Фамилию, а фото оставить?
поле <input type="file" /> = null

прописывать логику что если <input type="file" /> = null то фото не меняй?

да то что я и писал выше где вы указали что я не понимаю
либ мутить отдельную форму загрузки и на эдите не позволять грузить фото
вариантов уйма
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / IFormFile - как засунуть назад в <input type="file" />
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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