2010-12-11 82 views
1

因此我終於開始構建自定義控件,而不是使用返回HTML塊的函數;)但是我遇到了一個問題。我想傳遞參數控制,比如說,「X」:在自定義控件中綁定<%#的問題

<some:MessageControl runat="server" X=<%# "asd" %> /> 

我後面的代碼看起來是這樣的:

public partial class MessageControl : System.Web.UI.UserControl 
{ 
    String x = ""; 
    public String X 
    { 
     get { return x; } 
     set { x = value;} 
    }  
} 

當我輸出的控制x值,

x: <%= X %> 

它是空的。 如果我通過的「ASD」直接在

<some:MessageControl runat="server" X="asd" /> 

X得到正確的值。

這裏發生了什麼?我怎樣才能使這個工作?任何意見,讚賞, 尼古拉斯

編輯:更多的上下文。基本上我希望能夠在沒有設置其代碼後面的代碼中插入控件,但仍然可以通過調用包含頁面中的(變化)方法來設置其可見性。

<%@ Page Language="c#" Src="MyPage.aspx.cs" AutoEventWireup="true" Inherits="MyPage" %> 
<%@ Register Src="MessageControl.ascx" TagName="MessageControl" TagPrefix="some" %> 
<html> 
    <body> 
    <some:MessageControl runat="server" Visible=<%# SomeBoolMethodFromContaining Page%> /> 
    </body> 
</html> 
+0

:(壞壞的意大利麪條編碼 – Phill 2010-12-11 23:55:16

+0

你能不能詳細 – Nicolas78 2010-12-12 00:54:10

回答

1

對於<%= SomeMethods或Property%>表達式,您需要在父頁面或在OnPageLoad事件或其他事件上包含此表達式的控件中調用DataBind()方法。

例如這裏後面的代碼:

protected void Page_Load(object sender, EventArgs e) 
{ 
DataBind(); 
} 

protected string Hello 
{ 
    get { return "hello";} 
} 

這裏頁面的HTML部分:

<asp:Literal runat="server" Id="Literal1" Text="<%= Hello %>"/> 

對於可見性屬性代碼使用上述和<%#方法或屬性%>表達。對於文本使用<%=%>表達式。它將輸出呈現爲純文本。

希望它能幫助你解決你的問題。

最好的問候,迪馬。

+0

就是這樣!現在看起來非常合乎邏輯,我知道它;)非常感謝! – Nicolas78 2010-12-12 16:42:55

+0

不客氣! ))編碼祝你好運! :) – 2010-12-12 17:00:10

1

使用此:

X='<%# "asd" %>' 

注單引號。

+0

沒有區別:?/ – Nicolas78 2010-12-12 00:57:47

+0

給一些背景到您如何使用控制可以綁定語法一樣,可能不適用<%=可能工作 – ScottE 2010-12-12 12:21:08

+0

。感謝您的努力;請檢查我的更新,希望這使事情更清晰!<%=不工作,順便說一句 – Nicolas78 2010-12-12 15:43:48