2017-03-08 80 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