所以我终于开始构建自定义控件而不是使用返回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 :(得分:1)
使用此:
X='<%# "asd" %>'
请注意单引号。
答案 1 :(得分:1)
对于&lt;%= SomeMethods或Property%&gt;表达式,您需要在父页面或控件中调用DataBind()方法,该方法在OnPageLoad事件或其他事件上包含此表达式。
例如这里的代码背后:
protected void Page_Load(object sender, EventArgs e)
{
DataBind();
}
protected string Hello
{
get { return "hello";}
}
这里是页面的html部分:
<asp:Literal runat="server" Id="Literal1" Text="<%= Hello %>"/>
对于可见属性,请使用上面的代码和&lt;%#方法或属性%&gt;表达。对于文字使用&lt;%=%&gt;表达。它将输出呈现为纯文本。
希望它可以帮助您解决问题。
最好的问候,迪马。