Вызов Javascript на моей странице бритвы с контроллера в MVC4 - PullRequest
0 голосов
/ 15 февраля 2019

В моем контроллере у меня есть эта функция:

Function AppError() As ActionResult
        Dim myScript As Object = "popup(" + Properties.postError + ")"
        Return RedirectToAction("main", myScript)
    End Function

С помощью этой функции я хочу вызвать мою страницу бритвы, где у меня есть 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 совершенно пуст.Нет ценностей нет ничего.Я также добавляю это window.onload = @Html.Raw(ViewBag.MyScript);И в отладчике выкинуло мне ошибку

"Uncaught SyntaxError: Unnexpected token;"

Есть ли кто-то, чтобы проинструктировать меня, почему это произошло?

ДОПОЛНЕНИЕ - 16/2/19 20: 00 Новая версия функции и скрипта

Function CBError() As ActionResult
        Dim myScript As Object = Properties.postError
        ViewData.Add(New KeyValuePair(Of String, Object)("Message", myScript))
        Return View("main")
    End Function<br/>

<script type="text/javascript">
  $(document).ready(function (){
  alert("@ViewData.Values(0)");
  });
</script>

В этой версии я поместил значение message в ViewDataНо когда программа подходит к точке script, тогда все ViwData пусто.Нет значения нет Ключи нет ничего.Кажется, где-то посередине теряются все данные.

ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ 17/2/19 11: 13 Проблема была решена ... но не так, как мы носим.Это было решено очень простым способом.Мы запрашивали сообщение об ошибке на странице, на которой мы находимся. Из любой точки кода.Таким образом, я следовал методу рендеринга сообщения в собственность, и я прочитал это сообщение со страницы со следующим Javascript.Функция:

Function CodePage_Error() As ActionResult
        Return View("main")
    End Function

Конец Javascript:

<script type="text/javascript">
    $(document).ready(function () {
        if ("@Properties.InnerError" !== "") {
            var msg = "@Properties.InnerError";
            window.alert(msg);
        } else {
            return false;
        }

});Javascript находится в файле mainLayout.vbhtml

Вообще говоря, оказалось, что способ передачи с контроллера на страницу невозможен в среде MVC4

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Я думаю, что передача кода JS через RedirectToAction параметр значения маршрута не очень хорошая идея, потому что некоторые специальные символы будут закодированы.Вы должны использовать либо ViewBag, либо свойства viewmodel и передать скрипт для просмотра в незашифрованном состоянии.

Вот пример настройки:

1) Используйте ViewBag или свойство viewmodel для храненияскрипт, который вы хотите выполнить в представлении.

Public Function AppError() As ActionResult
    ' define Properties.postError here

    Dim myScript As String = "popup(" + Properties.postError + ")"
    ViewBag.MyScript = myScript

    Return View()
End Function

2) Используйте обработчик событий, например, window.onload, назначенный @Html.Raw() из ViewBag, или свойство viewmodel для передачи вызова незакодированной функции внутри <script>тег.Обработка событий должна быть размещена вне блока function.

<script type="text/javascript">
    var errMsg;
    function popup(msg) {
        errMsg = msg;
        window.alert(errMsg);
        window.window.focus();
        if (window.confirm)
            errmsg = '';
        msg = '';
    }

    // the popup will be called here
    window.onload = @Html.Raw(ViewBag.MyScript)
</script>

Обратите внимание, что window.onload отобразит сообщение после загрузки представления, если вы хотите открыть сообщение в другом событии, используйте любойвместо этого требуется обработчик событий (также проверьте список доступных событий JS DOM ).

0 голосов
/ 15 февраля 2019

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

Контроллер:

public IActionResult Index()
    {
        ViewBag.Message = "this is your message";
        return View();
    }

Просмотр:

<script type="text/javascript">
$(document).ready(function (){
alert("@ViewBag.Message");
});

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...