2010-08-04 12 views
2

是否有可能一個服務器標籤的屬性從C#表達,即像使用C#表達式來定義服務器標籤屬性值

<asp:TextBox Width='<%= [some c# expression] %>'/> 

設置?

我雖然這將是非常簡單,但我不能得到這樣的表達式運行。

感謝所有幫助

瑞安

回答

6

是的,這是可能的。您需要確保控件運行在服務器端(runat="server"),但取決於您在表達式中試圖評估的內容。

只要表達式返回一個字符串,它應該沒問題。

<asp:TextBox id="txt" runat="server" Width='<%= (10 * 10).ToString() %>px'/> 

這將在瀏覽器中產生width='100'

更新:

以上是完全錯誤的。您不能以這種方式將服務器端代碼渲染塊(<%%><%=%>)置於服務器端控件標記中(因爲它已經是運行服務器端)。

爲了動態控制值,這需要無論是在代碼隱藏或單獨的渲染塊內,以進行:

<% 
    txt.Width = (10 * 10).ToString() + "px"; 
%> 
<asp:TextBox id="txt" runat="server" /> 

參考參見thisthis

+0

我還想補充說''%=(10 * 10).ToString()%>'是一個'Response.Write((10 * 10).ToString());',只是爲了更好理解 – 2010-08-04 09:38:58

+0

這很奇怪。我試過你的例子: 但是我得到錯誤:無法從其中創建一個類型爲「System.Web.UI.WebControls.Unit」的對象字符串表示'寬度'屬性的'%=(10 * 10).ToString()%>'。 (The TextBox is in a databound grid) 我也嘗試過一個簡單的表達式<%="40"%>和<%="40px"%>。任何想法我做錯了什麼?謝謝。 – Ryan 2010-08-04 10:23:36

+0

@Ryan - 'Width'是一個'Unit',所以需要一個數字+一個單位。我的例子應該是'Width ='<%=(10 * 10)。ToString()%> px'' – Oded 2010-08-04 10:29:30

1

請注意您綁定的類型。

例如

<asp:TextBox runat=server ID=C_TB_MyTB 
     Text=<%# MyText %> 
     Width=<%# MyWidth %> 
    ></asp:TextBox> 

結合本框與

protected string MyWidth="300"; 
protected string MyText = "Bla bla bla..."; 

將無法​​正常工作,而:

protected int MyWidth=300; 
protected string MyText = "Bla bla bla..."; 

會做...

好的代碼你,

相關問題