2012-10-22 111 views
1

我有這個輸入元素,它與下劃線模板效果很好。如何阻止HTML助手編碼HTML元素的值屬性?

<input id="color" name="color" value="<%= color %>" /> 

我想使用Html.Helper方法來生成元素。

我最初嘗試只是基本的助手

@Html.TextBox("color", "<%= color %>") 

但是,這給了我

<input id="color" name="color" type="text" value="&lt;%= color %>" /> 

我試着包裝的價值屬性與Html.Raw但給出了同樣的結果,以及環繞整個幫手結果在同樣的事情。

整個塊被包裹在<script type="text/template">標記中。

爲什麼它會將<轉換爲&lt;以及如何讓它停止?

這工作,但

@MvcHtmlString.Create(Html.TextBox("color", "<%= color %>").ToString().Replace("&lt;", "<")) 
+0

因爲屬性值應該被編碼。 – SLaks

+0

我認爲你的問題在於你正在使用HTML生成工具來生成'text/plain',看起來像'text/html'很糟糕,但它不是HTML,不應該被當作HTML 。 –

+0

@ muistooshort,我將代碼包裝在'text/template'標籤中,但Razor助手在生成代碼時並不完全在意。 Underscore不會像我希望的那樣處理'<'。我只是想找一種方法讓Razor和Underscore.js一起工作。 – Brandon

回答

0

,如果你想使用從代碼隱藏商提供的顏色豈不是更好地把顏色屬性模型上有些凌亂那是否一定會認爲?然後,你可以使用:

public class MyModel 
{ 
    public string ColorField {get;set;} //not sure whether you wanted string color or hex color here. CHange it as necessary 
    //also add whatever else you need the UI to bind to 
} 

在你的控制,當你建立模型,你會把默認值:

public ViewResult MyViewName() 
{ 
    MyModel model = new MyModel { ColorField = "blue"; // or hex color/etc.} 
    //add other initialization here 
    return View(model); 
} 

然後在您的視圖

@model MyModel 

@Html.TextBoxFor(model=>model.ColorField, "color") 

它在我看來,你正在將傳統的ASP.NET語法與Razor語法混合在一起,但是我沒有在MVC中使用ASP.NET語法,所以我可能錯了,我想從舊的一個乾淨的休息。

無論如何,我上面描述的方式是我總是將默認值放到我的表單字段中,並且它工作得很好。

+1

'<%= color %>'用於客戶端的Underscore模板:http://underscorejs.org/#template –

+0

@anyeone,mu是正確的。我在客戶端使用Backbone/Underscore.js。 '<%%'是ASP.NET語法,但在這種情況下,它與Underscore.js模板一起使用。 – Brandon

+0

對不起,我誤解了這個問題。我的錯! – anyeone