Показать тост сообщение, позвонив с контроллера - PullRequest
0 голосов
/ 04 марта 2020

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

Вот мой взгляд:

 @(Html.DevExtreme()
               .Button()
               .Icon("check")
               .Hint("Check the User")
               .OnClick("function(e) {CheckUser(e,data,rowIndex) }")
               )

       function CheckUser(e, f, g) {
           console.log(e)
           console.log(f.InsertedUserId)
           console.log(f.AdminUserId)

           $.ajax({
               type: "POST",
               url: '@Url.Action("CheckUser","UserRoleManagement")',
               data: " {AdminUserId: '" + f.AdminUserId + "', InsertedUserId:'" + f.InsertedUserId + "', IsCSOUser: 'False'}",

               contentType: "application/json; charset=utf-8",
               dataType: "html",
               success: function (result) {
                   var a = '@TempData["CheckerResult"]';
                   if (a.toString() == "Succes") {
                       showToast(e)
                   }
                   else {
                       showToast3(e)
                   }

                   console.log(result);
               }
           })
       };

       function showToast(e) {
           console.log('showToast');

           $("#toast").dxToast({

               message: 'Updated succesfully',
               type: 'success',
               displayTime: 3000,
               maxWidth: 500,
               height: "auto",
               animation: { show: { type: 'fade', duration: 400, from: 0, to: 1 }, hide: { type: 'fade', duration: 400, to: 0 } },
               position: { my: 'center bottom', at: 'center bottom', of: window }
           });
           $("#toast").dxToast("show");

       }

       function showToast3(e) {
           console.log('showToast');

           $("#toast").dxToast({

               message: 'Process Failed.',
               type: 'error',
               displayTime: 3000,
               maxWidth: 500,
               height: "auto",
               animation: { show: { type: 'fade', duration: 400, from: 0, to: 1 }, hide: { type: 'fade', duration: 400, to: 0 } },
               position: { my: 'center bottom', at: 'center bottom', of: window }
           });
           $("#toast").dxToast("show");

       }

Вот мой контроллер:

[HttpPost]
public ActionResult CheckUser(string AdminUserId, string InsertedUserId, bool IsCSOUser)
        {
            RoleGroupRepository rep = new RoleGroupRepository();
            //TempData["Success"] = "User is checked Successfully.";

            SiteSession session = (SiteSession)SessionManager.ReturnSessionObject(SessionKeys.MainSession);

            long CurrentLoggedUserId = session.AdminUserId;

            if (CurrentLoggedUserId == Convert.ToInt64(InsertedUserId))
            {
                TempData["CheckerResult"] = "User check is not Successful.";
                pLogger.INF("User check is not Successful. User can not check by the Inserted User.");
                return Json(new { success = false, responseText = "Fail! User is not checked!" }, JsonRequestBehavior.AllowGet);
            }

            ReturnValuesParser returnValues = rep.CheckUser(AdminUserId, Convert.ToString(CurrentLoggedUserId), IsCSOUser);

            if (returnValues.ReturnCode == 1)
            {
                TempData["CheckerResult"] = "Succes";
                return Json(new { success = true, responseText = "Succes" }, JsonRequestBehavior.AllowGet);
            }
            else
            {
                TempData["CheckerResult"] = "User check is not Successful.";
                pLogger.INF("User check is not Successful" + returnValues.returnDescription_En);
            }

            return Json(new { success = false, responseText = "Fail! User is not checked!" }, JsonRequestBehavior.AllowGet);
        }

Что я должен изменить здесь, чтобы показать мое сообщение основано на результате TempData ["CheckerResult"]? Он всегда получает ссылку на шаг позади. Я логически понимаю проблему, но не знаю, как ее решить.

будет благодарен за любой ответ. Приветствия

1 Ответ

1 голос
/ 04 марта 2020

Вы изучаете значение, которое присутствовало, когда вы впервые отображали представление:

var a = '@TempData["CheckerResult"]';

Но не используете ничего из возвращенного результата в вызове AJAX:

result

Взгляните на источник страницы в вашем браузере и посмотрите, как @TempData["CheckerResult"] по сути становится жестко заданным буквальным значением для вашего JavaScript кода. Это не изменится.

По сути, не используйте TempData, когда вы не возвращаете представление. Вы возвращаете JSON, который содержит требуемую информацию:

return Json(new { success = true, responseText = "Succes" }, JsonRequestBehavior.AllowGet);

Итак, проверьте эту возвращенную информацию в обработчике AJAX ответа:

if (result.responseText == "Succes")

Вы также можете изменить это:

dataType: "html"

на это:

dataType: "json"

Поскольку вы ожидаете JSON от сервера, а не HTML .

...