用户控件显示不出来了!
在一个页面中,根据用户是否登录来显示对话框,后台代码如下:
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);