2017-03-08 81 views
0

所以我試圖動態地傳遞一些數據到一個JavaScript函數來爲用戶更新一些UI。ASP.NET MVC 5 - @ C#代碼沒有在運行時被翻譯

@Html.CheckBox("Sun1D", new { onclick = "addRemEvent(1, 'D', 
        @((List<DateTime>)ViewBag.dates).ElementAt(0) , '#Sun1D');" 
        , htmlAttributes = new { @class = "form-control" } }) 

但是在運行時,代碼似乎並沒有得到翻譯和我結束了

<input htmlAttributes="{ class = form-control }" 
id="Sun1D" 
name="Sun1D" 
onclick="addRemEvent(1, &#39;D&#39;, 
@((List&lt;DateTime>)ViewBag.dates).ElementAt(0) , 
&#39;#Sun1D&#39;);" 
type="checkbox" value="true" /> 

現在你可以看到這裏的問題。在那個javascript函數調用中應該有一個日期值,但是我只是將我的C#代碼作爲一個文字來獲取。

回答

3

您正在將服務器端代碼作爲字符串發送到客戶端。它不會執行該字符串,它只是將其發送到客戶端。

爲了簡化,而不是像這樣:

new { onclick="some text @someCode more text" } 

你想要這樣的:

new { onclick="some text " + someCode + " more text" } 

在你可能看起來像:

new { onclick = "addRemEvent(1, 'D', " + ((List<DateTime>)ViewBag.dates).ElementAt(0) + " , '#Sun1D');" } 

沒有什麼特別是Razor語法的事實,代碼仍然是代碼。您正在編寫C#代碼來構建一個字符串以放入對象的onclick屬性。就像在C#中構建任何其他字符串一樣,您將構建該字符串。 (這意味着如果你喜歡,你也可以使用string.Format()等)。

0
@Html.CheckBox("Sun1D", new { onclick = "addRemEvent(1, 'D',"+ 
        ((List<DateTime>)ViewBag.dates).ElementAt(0)+" , '#Sun1D');" 
        , htmlAttributes = new { @class = "form-control" } }) 
+1

你應該提供一個解釋與你的答案,而不僅僅是一個原始代碼轉儲。 – mason

+1

它可以工作,所以謝謝。 –

+0

@mason,有時候,可以注意到一些小的錯誤,沒有解釋 – levent