使用 Razor 添加 JS 代码

adding js code with razor

本文关键字:代码 JS 添加 Razor 使用      更新时间:2023-09-26

我正在动态生成一些选项卡。我最终有 4 个选项卡。选项卡的类是在foreach循环中设置的,它被设置为languageId,如下面的代码所示。

<div id="tabs">
  <ul>
    @for (int i = 0; i < Model.NoteViewModel.NoteTextViewModels.Count(); i++)
    {                                                       
      var languageId = @Model.NoteViewModel.NoteTextViewModels[i].LanguageId;                               
      var imageName = string.Format("FlagSmall_{0}.gif", languageId);
      <li>
        <a href="#@languageId" class="@currentLanguage">
          <img src="@Url.Content("~/Graphics/" + imageName)" />
        </a>
      </li>                                                                                     
    }
  </ul>

现在我介绍一个新变量:var currentLanguage = new NotesController().LogonInfo.LanguageId; 它保存登录用户的当前语言。我想做的是将焦点设置在 href(或 id 或类)与当前语言相同的选项卡上。为此,我想我需要 js,但由于我无法使用带有 razor 语法的 js 代码,所以我被困住了。所以我想要这样的东西:

@for (int i = 0; i < Model.NoteViewModel.NoteTextViewModels.Count(); i++)
{                                                       
  var languageId = @Model.NoteViewModel.NoteTextViewModels[i].LanguageId;
  var currentLanguage = new NotesController().LogonInfo.LanguageId;                                
  var imageName = string.Format("FlagSmall_{0}.gif", languageId);                              
  <li>
    <a href="#@languageId">
      <img src="@Url.Content("~/Graphics/" + imageName)" />
    </a>
  </li>                    
  if (languageId == currentLanguage)
  {
    documentation.getElementById("currentLanguage").focus();
  }
}

我怎样才能做到这一点?

我不能有带有剃刀语法的 js 代码

当然可以,但您可能需要显式告诉视图引擎这是客户端内容,而不是服务器端代码。 您可以使用 <text> 标记执行此操作。 它本身不是一个 HTML 标签,而是 razor 引擎用来指定静态内容的东西。 像这样:

<script type="text/javascript">
@for (int i = 0; i < Model.NoteViewModel.NoteTextViewModels.Count(); i++)
{
    <text>
    var someJavaScriptVariable = 'some value';
    // etc.
    </text>
}
</script>