2012-11-27 27 views
2

我在C#中的功能,我使用StringBuilder並添加JavaScript代碼,這是我的助手:JavaScript插入的StringBuilder

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);
return 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"> 

這種情況發生在函數的所有行

我怎麼能解決這個問題

回答

1

我建議在Html.Raw

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

@Lostdreamer - 'Html.Raw'很方便:) –

+0

是的,你也可以使用返回HtmlString的函數,剃鬚刀不會這樣編碼。 –

+0

@Lostdreamer - 這是另一種有效的方法,Raw只是返回一個'HtmlString'實例。也有注入整個剃刀聲明以及幫手的方法。 –

1

在剃刀語法@符號做HTML編碼包裝這的結果。

您可以通過從您的方法返回IHtmlString來防止這種情況,該方法基本上與@符號通信,您的文本不需要進行編碼。

要做到這一點是用來替換你的最後一行的最簡單方法:

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

小心你傳遞什麼,但是!