我查看了几个帖子,但没有找到实际解决这个问题的答案,所以我在试图提供最相关的细节时要求。
我有一个非常简单的脚本文件,名为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?
答案 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>