【问题标题】:ASP.NET MVC 5 - @C# code not being translated at runtimeASP.NET MVC 5 - @C# 代码在运行时没有被翻译
【发布时间】:2017-07-29 12:43:29
【问题描述】:

所以我试图动态地将一些数据传递给一个 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# 代码作为文字获取。

【问题讨论】:

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


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

    【讨论】:

    • 您应该在回答中提供解释,而不仅仅是原始代码转储。
    • @mason,有时会注意到一些小错误,无需解释
    • @levent 有时,一个如此微小的错误可能会在没有解释的情况下被遗漏。你应该总是在你的答案中加入解释。
    【解决方案2】:

    您将服务器端代码作为字符串发送到客户端。它不会执行那个字符串,它只是将它发送给客户端。

    为了简化,而不是这样的:

    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()等。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-26
      • 2012-05-20
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      相关资源
      最近更新 更多