在razor foreach语句中调用JavaScript函数

时间:2016-12-20 22:01:40

标签: javascript asp.net-mvc razor

我查看了几个帖子,但没有找到实际解决这个问题的答案,所以我在试图提供最相关的细节时要求。

我有一个非常简单的脚本文件,名为custom.js ...

function AddListItemToUnorderedList(pageCode, menuName) {
    $('.child_nav').append('<li><a href="' + pageCode + '"><span>' + menuName + '</span></a></li>');
} 

我在部分页面中引用了该脚本。

<script type="text/javascript" src="~/Scripts/custom.js"></script>

@{
   Layout = null;
 }

 <ul class="child_nav" style="display: none;"></ul>

 @foreach (var item in ViewBag.MenuItems)
 {
     @Html.Raw("<script type='text/javascript'>")
     @Html.Raw("AddListItemToUnorderedList('")
     @item.PageCode
     @Html.Raw("', '")
     @item.MenuName
     @Html.Raw("');")
     @Html.Raw("</script>")
 }

上面的代码有效,但看起来很糟糕,它为MenuItems集合中的每个项目的标记添加了脚本标记。 MenuItems集合只包含一个与我的菜单显示名称和html链接相关的两个字符串的列表....考虑使用测试页面这样的名称和 myTestPage .com 链接。

我看到了一些像这样的快捷语法

@: AddListItemToUnorderedList(item.PageCode, item.MenuName)
然而,无论我尝试什么,我都无法工作。

任何明确的建议都可以让我直接调用JavaScript函数从ViewBag中传递两个属性,我不需要创建脚本标记并使用@ Html.Raw?

1 个答案:

答案 0 :(得分:2)

下面的内容应该有效。从foreach中拉出脚本标签,然后引用javascript。您还必须在javascript周围添加<text></text>标记并围绕变量引用,以便它们正确传输:

<script type='text/javascript'> 
@foreach (var item in ViewBag.MenuItems)
{
    <text>AddListItemToUnorderedList('@item.PageCode', '@item.MenuName')</text>
}
</script>