我在globalsearch.aspx中有一个用户控件。
<Menu:SRH id="NavSRH1" nItems="30" KeyWord="<% =ss %>" runat="server" ></Menu:SRH>
在globalsearch.aspx.cs中的我设置了字符串&#34; ss&#34;
的值 public string ss = "";
ss = Request.QueryString["q"]; //value is "Happy"
在usercontrol中,我得到的关键字的值是&lt;%= ss%&gt; ,但我希望该值为快乐。我觉得它会取代价值,但事实并非如此。
答案 0 :(得分:2)
This MSDN博客告诉
- &lt;%#表达式可用作服务器端控件中的属性。 &lt;%=表达式不能。
用户控件更像是服务器端控件而不是HTML文字,因此您必须将"<% =ss %>"
更改为可以<%# expression %>
形式编写的标准Single-Value Binding:
"<%# ss %>"
不要忘记在代码隐藏中调用DataBind
方法(例如在PreRender
处理程序或Page_Load
中,具体取决于您的要求)
嗯,我不确定问题是什么,但这里有一些工作原型:
页面aspx:
...
<Menu:SRH runat="server" id="SRH" KeyWord="<%# ss %>"/>
...
页面代码隐藏:
protected void Page_Load(object sender, EventArgs e)
{
this.ss = "Happy KeyWord";
this.DataBind();
}
public String ss;
用户控制ascx:
...
<asp:Panel runat="server" BorderWidth="1" BorderColor="Black" BorderStyle="Solid">
<asp:Label runat="server" Text="<%# KeyWord %>" />
<br />
<asp:Label runat="server" ID="label" ForeColor="Red"/>
</asp:Panel>
用户控制代码隐藏:
protected void Page_Load(object sender, EventArgs e)
{
String text = this.KeyWord ?? "NO VALUE";
this.label.Text = "User control load value is : " + text;
}
public String KeyWord
{
get;
set;
}
输出:
主页Happy KeyWord
用户控件加载值为:主页Happy KeyWord
P.S。:此外,如果您在网页上使用ViewState,则必须将这些属性创建为ViewState backed properties。