2015-03-08 35 views
1

我在寫一個生成JavaScript代碼併發送剃鬚刀視圖的方法。 但剃刀視圖編碼這根據它的head.Codes在下面。MvcHtmlString無剃刀編碼

這是我的方法體,返回mvchtmlstring:

StringBuilder scriptHtml = new StringBuilder(); 
     scriptHtml.Append("<script>"); 
     scriptHtml.Append(@"var {0} = {{ 
        id: 'someText', 
        title: '{1}', 

       $(document).ready(function() {{ 
         $.function({0}); 
        }});"); 

     scriptHtml.Append("</script>"); 
var output = string.Format(scriptHtml.ToString(), this.Id, this.Title); 
return MvcHtmlString.Create(output); 

所以,現在,它的輸出是:

@&lt;script&gt;var tlyPageGuide,,&quot;direction&quot;:&quot;Right&quot; 

像這樣具有編碼的增長。

這就是我想要的是Razor不應該改變我的代碼,而cshtml正在創建,我得到純JavaScript代碼與渲染。

注:我不想使用Html.Raw()作爲解決方案。我想在服務器端進行此操作。

+1

你是什麼意思「服務器端」?你在服務器端渲染的所有Razor視圖。 – 2015-03-08 19:05:54

+1

我的意思是,我不想在視圖中添加任何其他的Html.Raw()代碼。我想在'return MvcHtmlString.Create(output)'或方法主體上編碼它。順便一提; Html.Raw()正在工作,但我不想每次和每當我通過Helper像這樣@ @ Html.Raw(Html.MyHelper.MyMethod())調用我的方法時使用它。 – 2015-03-08 19:09:46

回答

1

您是否考慮過使用局部視圖?

例如:(此代碼中可能有錯誤,但你的想法):

class MyScriptModel 
{ 
    public string Id {get;set;} 
    public string Title {get;set;} 
} 

//your partial view: my_partial.cshtml 
@model MyScriptModel 
//extracted from your string builder 
<script> 
     var @Model.Id = {{ 
        id: 'someText', 
        title: '@Model.Title', 

       $(document).ready(function() {{ 
         $.function(@Model.Id); 
        }}); 

</script> 

//instantiate the model 
var model = new MyScriptModel {Id="someid", Title="some title"}; 

//using your partial view 
@Html.Partial("my_partial", model)