日期:2014-05-18  浏览次数:20370 次

用户控件显示不出来了!
在一个页面中,根据用户是否登录来显示对话框,后台代码如下:
m_strLogin   已定义为public,
if   (Session[ "user "]   !=   null)
{
          m_strLogin   =   " <uc1:left2   id=\ "Left21\ "   runat=\ "server\ "> </uc1:left2> ";
}
else
{
          m_strLogin   =   " <uc1:left   id=\ "Left1\ "   runat=\ "server\ "> </uc1:left> ";
}
aspx页面:
<%@   Register   TagPrefix= "uc1 "   TagName= "left "   Src= "../UserControl/left.ascx "   %>
<%@   Register   TagPrefix= "uc1 "   TagName= "left2 "   Src= "../UserControl/left2.ascx "   %>
在某处插入
<%=   m_strLogin   %>
但是这个控件并没有显示处理,看了html代码,在这个位置变成了 " <uc1:left   id= "Left1 "   runat= "server "> </uc1:left> ,只是简单的字符替换,没有把控件的源代码加载过来,这个怎么改进?谢谢了

------解决方案--------------------
<%= m_strLogin %> 这样是显示html到浏览器. 你可以用动态加载控件 Control c = this.LoadControl( "aa.aspx "); this.Panel1.Contorls.Add(c);
------解决方案--------------------
runat=\ "server\ "的服务器控件不能直接这样设置,必须使用LoadControl来动态加载
------解决方案--------------------
其实你这样情况,这样设计更方便写,把2个控件都拖放在页面上,
然后判断用户是否登入来控制1个控件显示,1个控件隐藏就好了。
------解决方案--------------------
根据判断加载哪个用户控件好了

就是慕白兄的意思
------解决方案--------------------
其实你这样情况,这样设计更方便写,把2个控件都拖放在页面上,
然后判断用户是否登入来控制1个控件显示,1个控件隐藏就好了。

我也觉得这样的方案更可行,毕竟每个系统的登陆都不会完全相同
------解决方案--------------------
1. 简单、容易方式

拖拽所有目标用户控件到页面

根据条件控制其 Visible=false; // true


2. 有经验者,可考虑使用 LoadControl 动态加载

// .aspx
<asp:panel id=Panel1 ...


// .aspx.cs
UserControl uc = Session[ "user "] != null ? LoadControl(.ascx文件A的虚拟路径) : LoadControl(.ascx文件B的虚拟路径);
Panel1.Controls.Add(uc);