Гость
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как имплементировать контроллер без вью? / 17 сообщений из 17, страница 1 из 1
25.04.2018, 23:32
    #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
26.04.2018, 08:18
    #39636518
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как имплементировать контроллер без вью?
NickRenziglov,
Не понял хотелки.
Есть только post get ajax.
Всё.
Термин контроллер, он только для бэк программиста.
...
Рейтинг: 0 / 0
26.04.2018, 09:14
    #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
26.04.2018, 09:43
    #39636581
Агнец за бортом
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как имплементировать контроллер без вью?
big-duke,

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

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

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

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

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



где this - это форма. Так?
Тем не менее, аргументом функции контроллера всегда приходит null. Почему?
Что такое AddAlbumPhotoCommand в вашем примере?
...
Рейтинг: 0 / 0
26.04.2018, 16:01
    #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
26.04.2018, 16:04
    #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
26.04.2018, 16:06
    #39636849
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как имплементировать контроллер без вью?
NickRenziglovNickRenziglov,


return Content("");



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

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

return RedirectToAction("Index");

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

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

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

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

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

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

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

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



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

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

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




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

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


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