Lefteris Gkinis Ответов: 2

Вызов javascript на моей странице razor из контроллера в MVC4


В моем контроллере у меня есть эта функция:
Function AppError() As ActionResult
          Dim myScript As Object = "popup(" + Properties.postError + ")"
          Return RedirectToAction("main", myScript)
      End Function

С помощью этой функции я хочу вызвать свою страницу razor, где у меня есть Javascript с именем "popup` и параметром" Properties.postError`.

Мой сценарий таков:
<script type="text/javascript">
       var errMsg;
       function popup(msg) {
           errMsg = msg;
           window.alert(errMsg);
           window.window.focus();
           if (window.confirm)
               errmsg = '';
           msg = '';
       }
   </script>

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

Что я уже пробовал:

Дополнение - 16/2/19 12:50
то, что я сделал до сих пор, заключается в следующем:

Function CBError() As ActionResult
        Dim myScript As Object = "popup(" + Properties.postError + ")"
        ViewData.Add(New KeyValuePair(Of String, Object)("ScriptName", myScript))
        Return View("main", myScript)
    End Function

Как мы видим я изменил эту функцию добавив ViewData
Я добавляю пару значений аргументов 1) имя 2) Значение
Действие сложения работает просто отлично, и дикция его получает.
Я свой скрипт (который находится на моей странице reazor) Я поставил следующее:

<script type="text/javascript">
   var vd = @ViewData.Item(0);
       function popup(msg) {
            var errMsg;
        errMsg = msg;
        window.alert(errMsg);
        window.window.focus();
        if (window.confirm)
            errmsg = '';
        msg = '';
        //{ window.location.href = "/" }
    }
</script>

Когда я останавливаюсь (с помощью bebugger) в инструкции var vd = @ViewData.Item(0); я вижу, что ViewData полностью пуст. Никаких ценностей, ничего.
Я также добавляю это окно.onload = @Html.Raw(ViewBag.MyScript);
А в отладчике мне выкинули ошибку

"Непойманный синтаксис ошибка: непредвиденная лексема ;"



.

F-ES Sitecore

Просмотрите исходный код страницы в браузере и посмотрите, как выглядит javascript, что может дать вам ключ к пониманию того, почему он не работает.

2 Ответов

Рейтинг:
5

Lefteris Gkinis

Проблема была решена с помощью ajax-скрипта...
Но все равно спасибо...
Теперь я публикую еще один вопрос, на который никто не дает ответа (до сих пор)
Так что давайте попробуем решить этот вопрос... который очень важен...


Рейтинг:
0

Richard Deeming

Вы сталкиваетесь с кошмаром неявного принуждения типа VB.

  • То ViewData собственность есть один ViewDataDictionary объект[^], который представляет собой словарь со строковым ключом.
  • Вы добавляете элемент с ключом "ScriptName";
  • Вы пытаетесь получить предмет с помощью ключа 0. VB "услужливо" преобразует это в строку "0" для тебя;
  • В словаре нет пункта с ключом "0".


Вы должны использовать тот же ключ для извлечения элемента, который вы использовали при его добавлении:
@ViewData("ScriptName")