Можем ли мы получить несколько ответов от контроллера для просмотра (ajax-mvc)? - PullRequest
0 голосов
/ 26 июня 2018

Я работаю над модулем регистрации. Поток как:

  1. Сохранить данные в базе данных.

  2. Уведомить пользователя о сохранении данных.

  3. Отправить пароль по электронной почте.

  4. Снова обновите интерфейс. Мол, пароль был отправлен по электронной почте.

Я хотел сделать это за один вызов пользовательского интерфейса на сервере. Шаг-1 и Шаг-3 были завершены. Но я не знаю, как я могу выполнить шаг -2 и шаг -4 асинхронно.

Вот код:

public async Task<JsonResult> CheckUserNameAndInsert(Guid BusinessId, string username, string Email)
    {
    // save data in db
            LoginViewModel loginViewModel = new LoginViewModel();
            loginViewModel.Username = username;
            loginViewModel.BuisnessID = BusinessId;
            loginViewModel.Email = Email;  
            ReturnType returnResult = SaveData(loginViewModel);


    // send response to notify user that data has been saved.
            returnResult.isSent = false;
            var obj = JsonConvert.SerializeObject(returnResult);
            Response.Write(obj);
            Response.Flush();

    //Sending password in email
                IEmailManagement em = new EmailManagement();

    //I am making async call to "em.SendPassword" method.
                var task = em.SendPassword(returnResult.Email, returnResult.Password);  
        var isEmailSend = await task;

                returnResult.isSent = isEmailSend;
        obj = JsonConvert.SerializeObject(returnResult);
    //Notifying user about sent email.
                Response.Write(obj);
                Response.Flush();
                Response.End();

            return Json(new { data = returnResult }, JsonRequestBehavior.AllowGet);
        } 

Я получаю только один ответ после выполнения обеих задач.

1 Ответ

0 голосов
/ 26 июня 2018

Это не решение вашего вопроса о направлении, но именно так я бы построил что-то для этого:

Первый - создать таблицу событий со столбцами для идентификатора транзакции, действия и статуса.

Пользователь будет взаимодействовать с кнопкой для сохранения данных.

Страница вызывает ваш контроллер и получает идентификатор транзакции. Это возвращается на вашу страницу вызова.

Внутренне контроллер затем вызывает отдельные методы для сохранения данных и отправки электронных писем. Он передает назначенный идентификатор транзакции каждому методу.

Когда каждый метод завершается успешно, он обновляет таблицу событий с идентификатором транзакции, состоянием и связанным действием.

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

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

Вы можете использовать таблицу событий для множества вещей, помимо этой единственной функциональности. Если не считать Signal R или Meteor или иметь полнофункциональный продукт для обработки событий в очереди, это должно помочь вам.

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

...