2016-12-20 28 views
0

我瀏覽過幾篇文章,但還沒有找到實際解決此問題的答案,所以我在詢問的同時嘗試提供最相關的細節。在剃鬚刀foreach語句中調用JavaScript函數

我有一個名爲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) 
然而

,我沒能得到那個工作,無論我怎麼努力。

任何明確的建議,工作,讓我做出傳遞從ViewBag這兩個屬性的JavaScript函數直接調用,我沒有創建腳本標籤和使用@ Html.Raw?

+4

您有XSS漏洞。 – SLaks

+2

不要這樣做。相反,將這些值放在'data- *'屬性中並從JS讀取它們。 – SLaks

+0

我會感激上述問題的解決方案,而不是重新設計 –

回答

1

像下面的東西應該工作。從foreach中提取腳本標籤,然後引用javascript。您還必須在JavaScript附近放置<text></text>標籤並在變量周圍添加引號,以便它們能夠正確傳輸:

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

你的代碼不會工作;塊的內容(比如'@ foreach')是C#,而不是HTML。 – SLaks

+0

Slaks,我的代碼工作,但我知道必須有更好的方法 –

+0

eric g,所以當我在foreach前後添加腳本標籤時,我沒有收到任何迴應。這是行不通的。該錯誤表示腳本不能嵌套在元素中,即ul。 –