【问题标题】:JavaScript into StringBuilderJavaScript 到 StringBuilder
【发布时间】:2012-11-27 23:35:36
【问题描述】:

我在 c# 中有一个函数,我使用 StringBuilder 并添加了 JavaScript 代码,这是我的助手:

public static string RegisterJS(this System.Web.Mvc.HtmlHelper helper, string scriptLib)
{
    StringBuilder JavaScript = new StringBuilder();
    JavaScript.AppendFormat(@"<script type= ""text/javascript"">{0}", Environment.NewLine);
    JavaScript.AppendFormat(@"var toolbar = new toolBarObject('toolbarObj');{0}", Environment.NewLine);
    JavaScript.AppendFormat(@"toolbar.disableElements('" + scriptLib + "', true);{0}", Environment.NewLine);

... ... JavaScript.AppendFormat(@"{0}", Environment.NewLine);
返回 JavaScript.ToString(); }

调用此函数以在 Asp.Net MVC4 中的一个部分中加载应用程序:

如下:

@section ToolBar{
  <h2>aqui debo cargar mi javascript</h2>
   @Html.RegisterJS("Personal")
}

我运行程序并显示我拥有的页面代码:

&lt;script type= &quot;text/javascript&quot;&gt;

我应该有这个:

<script type= "text/javascript">

这发生在函数的所有行中

我该如何解决这个问题

【问题讨论】:

    标签: asp.net asp.net-mvc c#-4.0 asp.net-mvc-4


    【解决方案1】:

    我建议将其包装在 Html.Raw

    @section ToolBar
    {
     <h2>aqui debo cargar mi javascript</h2>
     @Html.Raw(Html.RegisterJS("Personal"))
    }
    

    【讨论】:

    • @Lostdreamer - Html.Raw 很方便 :)
    • 是的,你也可以使用返回 HtmlString 的函数来代替,razor 不会这样编码。
    • @Lostdreamer - 这是另一种有效的方法,Raw 只返回一个 HtmlString 实例。还有一些方法可以从帮助程序中注入整个 razor 语句。
    【解决方案2】:

    razor 语法中的 @ 符号对结果进行 HTML 编码。

    您可以通过从您的方法返回 IHtmlString 来防止这种情况发生,该方法本质上与 @ 符号进行通信,表明您的文本不需要编码。

    最简单的方法是将最后一行替换为:

    return MvcHtmlString.Create(JavaScript.ToString());
    

    但是要小心你传入的内容!

    【讨论】:

      猜你喜欢
      • 2018-09-22
      • 1970-01-01
      • 2016-03-08
      • 2015-01-03
      • 2023-03-07
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      相关资源
      最近更新 更多