ASP.NET MVC смешивает бритву и JavaScript

1

Как передать переменную JavaScript в код Razor?

Здесь у меня есть простые вкладки

<div id="AboutDoctor" style="min-height:34vh;">
<div class="row text-center text-primary">@MEDONET.Language.Doctor.Texts.About</div>
<div class="col-xs-2">
    <!-- required for floating -->
    <!-- Nav tabs -->
    <ul class="nav nav-tabs tabs-left">
        <li><a href="#_Info" data-toggle="tab" onclick="GetTabPane('_Info')">@MEDONET.Language.Doctor.Texts.Info</a></li>
        <li><a href="#_Diplomas" data-toggle="tab" onclick="GetTabPane('_Diplomas')">@MEDONET.Language.Doctor.Texts.Diplomas</a></li>
        <li><a href="#profile" data-toggle="tab">@MEDONET.Language.Common.Texts.Licenses</a></li>
        <li><a href="#messages" data-toggle="tab">@MEDONET.Language.Doctor.Texts.Summary</a></li>
        <li><a href="#settings" data-toggle="tab">@MEDONET.Language.Common.Texts.Reviews</a></li>
        <li><a href="#_Contacts" data-toggle="tab" onclick="GetTabPane('_Contacts')">@MEDONET.Language.IndexTexts.Contact</a></li>
    </ul>
</div>
<div class="col-xs-9" style="margin-top:3vh">
    <!-- Tab panes -->
    <div class="tab-content">
        <div class="tab-pane" id="_Info">@MEDONET.Language.Common.Texts.Loading...</div>
        <div class="tab-pane" id="_Diplomas">@MEDONET.Language.Common.Texts.Loading...</div>
        <div class="tab-pane" id="profile">Licenses</div>
        <div class="tab-pane" id="messages">Summary</div>
        <div class="tab-pane" id="settings">Reviews</div>
        <div class="tab-pane" id="_Contacts">@MEDONET.Language.Common.Texts.Loading...</div>
    </div>
</div>

И нажав на вкладку, пользователь вызывает функцию GetTabPane() и передает ей имя функции. Функция сама по себе выглядит так:

 function GetTabPane(val) {
    $('#'+val).load("@Url.Action("val", "Doctors", new { id = Model.Id })",
        function () { $('#'+val).tab-pane('show') });
 }

Почти все работают, кроме той части, где я пытаюсь передать val как имя действия

... Действие ( "Вал",...

Итак, как можно передать значение JavaScript в Razor внутри блока сценария?

  • 0
    Нет, вы не можете сделать Url.Action с переменной JS. Единственный способ сделать это - объединить переменную JS в стандартный URL-адрес (например, "/Doctors/" + val + "/id=... ) или использовать вызов AJAX для ее получения.
Теги:
razor
asp.net-mvc

1 ответ

0
Лучший ответ

Вы не можете передать значение JavaScript в Razor. Причина в том, что в жизненном цикле страницы страницы выполняется код:

  • Код Razor выполняется на сервере до того, как страница будет возвращена клиенту
  • Код JS выполняется на клиенте после того, как страница была возвращена

Но вы можете решить свою конкретную проблему, сначала создав URL-адрес с помощью заполнителя, а затем замените его в JS-коде.

<script type="text/javascript">

var urlPattern = '@Url.Action("__ACTION_NAME_TO_BE_REPLACED__", "Doctors", new { id = Model.Id })';

function GetTabPane(val) {
    var url = urlPattern.replace('__ACTION_NAME_TO_BE_REPLACED__', val);
    $('#'+val).load(url, function () { $('#'+val).tab-pane('show'); });
}
</script>
  • 0
    Оно живое! Оно живое !!!!! БОЛЬШОЕ ВАМ СПАСИБО!!!!
  • 0
    Рад помочь :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню