asp.net中的用户控件未设置<%= value%>

时间:2015-03-20 17:24:33

标签: c# asp.net

我在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; ,但我希望该值为快乐。我觉得它会取代价值,但事实并非如此。

1 个答案:

答案 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