ASP.NET MVC 5 - @ C#代码在运行时未被翻译

时间:2017-03-08 19:13:19

标签: javascript c# asp.net-mvc-5

所以我试图动态地将一些数据传递给javascript函数来为用户更新一些UI。

 @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#代码作为文字。

2 个答案:

答案 0 :(得分: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()等。)

答案 1 :(得分:0)

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