powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как имплементировать контроллер без вью?
17 сообщений из 17, страница 1 из 1
Как имплементировать контроллер без вью?
    #39636432
NickRenziglov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет.
Вернее, мне нужно выполнить действие на сервере, но не возвращать вью. Вью длжна быть та же самая.
Аджакс не подходит, речь идет о загрузке клиентского файла на сервер:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<div class="col-md-6">
                    @using (Html.BeginForm("UploadNew", "Attachment", FormMethod.Post,
                    new { enctype = "multipart/form-data", id = "uploadNewDialog" }))
                    {
                        <input type="hidden" name="hf1" id="hf1" />
                        <label for="file">@TextResources.Strings.UploadAttachement:</label>
                        <input type="file" name="file" id="file" style="width: 100%;" />
                        <input type="submit" onclick="javascript: $('#hf1').val(jsCurrentFolder);" value="Upload" class="btn btn-info btn-block" />
                    }
                </div>


Спасибо
...
Рейтинг: 0 / 0
Как имплементировать контроллер без вью?
    #39636518
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickRenziglov,
Не понял хотелки.
Есть только post get ajax.
Всё.
Термин контроллер, он только для бэк программиста.
...
Рейтинг: 0 / 0
Как имплементировать контроллер без вью?
    #39636565
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickRenziglov,

можно вот так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
[HttpPost, ValidateAntiForgeryToken, Authorize]
        public ActionResult AddAlbumPhoto([Bind(Include = "UrlData,PreUploadedPhotoUrl,AlbumId")] AddAlbumPhotoCommand command)
        {
            var personId = User.Identity.GetPersonId();
            command.PersonId = personId;
            var res = _commandDispatcher.CanDispatch(command);
            if (!res.Any())
            {
                _commandDispatcher.Dispatch(command);
                Response.StatusCode = 200;
                return Json(new { returnedPhotoId = command.ReturnedPhotoId, returnedPhotoUrl = command.ReturnedPhotoUrl, returnedOriginalPhotoUrl = command.ReturnedOriginalPhotoUrl }, JsonRequestBehavior.AllowGet);
            }
            else
            {
                Response.StatusCode = 400;
                return Json(ValidationHelper.ShowResultAsHtmlList(res), JsonRequestBehavior.AllowGet);
            }
        }




Вот фронт
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
 $.ajax({
            type: "POST",
            url: "/Manage/addalbumphoto",
            data: data,
            processData: false,
            contentType: false,
            beforeSend: showLoadingIndicator,
            success: function () {
                fetchAlbumPhotos(albumId,
                    function (data) {
                        $("#photo__container").html(data);
                        hideLoadingIndicator();
                        $("#photo__add__dialog").modal("hide");
                    });
            },
            error: function (xhr) {
                showDispathErrors(xhr);
            }
        });
...
Рейтинг: 0 / 0
Как имплементировать контроллер без вью?
    #39636581
Агнец за бортом
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
big-duke,

Он говорит, что AJAX не подходит (почему?).

Потом он в коде показывает, что хочет сабмитить форму, передать файл, НО не рефрешить страницу.
...
Рейтинг: 0 / 0
Как имплементировать контроллер без вью?
    #39636585
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Агнец за бортом,
ну тогда кода контроллера ему хватит.
...
Рейтинг: 0 / 0
Как имплементировать контроллер без вью?
    #39636821
NickRenziglov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-duke,

Вот этот кусок:
data: data,
processData: false,
contentType: false,

Очевидно, data определяется так:

Код: javascript
1.
var data = new FormData($(this)[0]);



где this - это форма. Так?
Тем не менее, аргументом функции контроллера всегда приходит null. Почему?
Что такое AddAlbumPhotoCommand в вашем примере?
...
Рейтинг: 0 / 0
Как имплементировать контроллер без вью?
    #39636842
NickRenziglov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NickRenziglov,

Опа. Кажется проблема решилась очень просто.
Работает обычный вызов контроллера. Но возвращать вью не надо. Вернее, надо, но вот так:

return Content("");

Страница при этом пустеет. Это плохо, я собсно с этого и начал. Но надо сказать браузеру

No Content. The server successfully processed the request and is not returning any content

Это достигается передачей соответствующего кода:

Response.StatusCode = 204;
return Content("");

И контроллер отработал и страница на месте.
Чтоб оповестить или обновить страницу, можно внедрить в нее соответствующий StartupScript, но это уже другая история.
Люблю ASP.NET MVC.
...
Рейтинг: 0 / 0
Как имплементировать контроллер без вью?
    #39636844
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickRenziglov,

Конкретно в моем случае Data определяется вот так
Код: javascript
1.
2.
3.
4.
5.
6.
7.
var urldata = $("#imgCrop").cropper("getCroppedCanvas").toDataURL("image/jpeg");

        var data = new FormData();
        data.append("urldata", urldata);
        data.append("albumid", albumId);
        data.append("preuploadedphotourl", $("#imgCrop").attr("src").replace("/service/imageProxy?src=", ""));
        data.append("__RequestVerificationToken", tokenValue);



Но вы можете через F12 можете проверить на что у вас указывает this.

AddAlbumPhotoCommand это часть CQRS, а именно Command.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    public class AddAlbumPhotoCommand : ICommand
    {
        public string PreUploadedPhotoUrl { get; set; }
        public string UrlData { get; set; }
        public int AlbumId { get; set; }
        public int PersonId { get; set; }
       ...

    }

 public class AddAlbumPhotoCommandHandler : ICommandHandler<AddAlbumPhotoCommand>
{
         public IEnumerable<ValidationResult> Validate(AddAlbumPhotoCommand command)
            {
            }
        public void Execute(AddAlbumPhotoCommand command)
            {
            }
}
...
Рейтинг: 0 / 0
Как имплементировать контроллер без вью?
    #39636849
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickRenziglovNickRenziglov,


return Content("");



Может так ?
Код: c#
1.
return new EmptyResult();
...
Рейтинг: 0 / 0
Как имплементировать контроллер без вью?
    #39636854
NickRenziglov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-duke,

Не принципиально. Можно даже вернуть полновесный вью типа

return RedirectToAction("Index");

Но код 204 решает все. Страница останется старая.
...
Рейтинг: 0 / 0
Как имплементировать контроллер без вью?
    #39636867
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickRenziglov,

Может вам Partial View тогда запилить на странице ?
...
Рейтинг: 0 / 0
Как имплементировать контроллер без вью?
    #39636924
NickRenziglov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-duke,

>Может вам Partial View тогда запилить на странице
Пробовал. Все равно вся страница взвращается пустая.

Решение с кодом 204 меня вполне устраивает. Единственно, что нельзя внедрить сообщение об ошибке или обновить страницу.
Поскольку страница не вернулась (ну, код 204) никакой стартапный скрипт на ней, конечно, не обрабатыватися.
Но это технические мелочи, которые решаются массой способов.
Спасибо.
...
Рейтинг: 0 / 0
Как имплементировать контроллер без вью?
    #39636928
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickRenziglov,

если не секрет, то почему ajax под запретом ?
...
Рейтинг: 0 / 0
Как имплементировать контроллер без вью?
    #39636938
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
big-dukeNickRenziglov,

если не секрет, то почему ajax под запретом ?
Дак при загрузке файла на сервер он не нужен.
Наверно это имелось ввиду.
...
Рейтинг: 0 / 0
Как имплементировать контроллер без вью?
    #39636941
NickRenziglov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-duke,

Не под запретом. Просто это сложнее, чем работать с классическим

Код: html
1.
<input type="file" name="file" id="file" />



Там сразу передается и контент и имя файла и прочее, все как было в WebForms.
Просто влом все это делать вручную для аджакса.
...
Рейтинг: 0 / 0
Как имплементировать контроллер без вью?
    #39638445
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickRenziglovbig-duke,

Не под запретом. Просто это сложнее, чем работать с классическим

Код: html
1.
<input type="file" name="file" id="file" />




Там сразу передается и контент и имя файла и прочее, все как было в WebForms.
Просто влом все это делать вручную для аджакса.
А как же пользователь, который хочет пяток файлов выделить и драгэндропунть их на страницу и радостно наблюдать за прогрессом их заливки на сервер?
...
Рейтинг: 0 / 0
Как имплементировать контроллер без вью?
    #39638454
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Такому пользователю отдается статическая картинка с нарисованным синонимом слова болт. :D
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как имплементировать контроллер без вью?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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