asp.net 调用ascx问题
如果直接调用<%@RegisterSrc="tjyh.ascx"TagName="t1"TagPrefix="uc1"%><%@RegisterSrc="yhfb.asc...
如果直接调用
<%@ Register Src="tjyh.ascx" TagName="t1" TagPrefix="uc1" %>
<%@ Register Src="yhfb.ascx" TagName="t2" TagPrefix="uc1" %>
<td style="width: 550px">
<asp:Label ID="Label3" runat="server" Width="550px"> </asp:Label><uc1:t1 ID= "ulcLogin" runat="server" /><uc1:t2 ID= "T1_1" runat="server" /></td>
都能显示tjyh.ascx和yhfb.ascx的内容(都是静态的);
但如果用事件<%@ Register Src="tjyh.ascx" TagName="t1" TagPrefix="uc1" %>
<%@ Register Src="yhfb.ascx" TagName="t2" TagPrefix="uc1" %>
<td style="width: 550px">
<asp:Label ID="Label3" runat="server" Width="550px"> </asp:Label></td>
cs代码:
if (!IsPostBack)//执行button1_click时会先执行page_load,这里是回发页面判断
{
if (Request["id"] == "1")
{
string a = "<uc1:t1 ID= \"ulcLogin\" runat=\"server\" />";
Label3.Text = a;
}
if (Request["id"] == "2")
{
Label3.Text = "<uc1:t2 ID= \"ulcLogin1\" runat=\"server\" />";
}
}
显示是空白的,我跟踪了下都运行到的 展开
<%@ Register Src="tjyh.ascx" TagName="t1" TagPrefix="uc1" %>
<%@ Register Src="yhfb.ascx" TagName="t2" TagPrefix="uc1" %>
<td style="width: 550px">
<asp:Label ID="Label3" runat="server" Width="550px"> </asp:Label><uc1:t1 ID= "ulcLogin" runat="server" /><uc1:t2 ID= "T1_1" runat="server" /></td>
都能显示tjyh.ascx和yhfb.ascx的内容(都是静态的);
但如果用事件<%@ Register Src="tjyh.ascx" TagName="t1" TagPrefix="uc1" %>
<%@ Register Src="yhfb.ascx" TagName="t2" TagPrefix="uc1" %>
<td style="width: 550px">
<asp:Label ID="Label3" runat="server" Width="550px"> </asp:Label></td>
cs代码:
if (!IsPostBack)//执行button1_click时会先执行page_load,这里是回发页面判断
{
if (Request["id"] == "1")
{
string a = "<uc1:t1 ID= \"ulcLogin\" runat=\"server\" />";
Label3.Text = a;
}
if (Request["id"] == "2")
{
Label3.Text = "<uc1:t2 ID= \"ulcLogin1\" runat=\"server\" />";
}
}
显示是空白的,我跟踪了下都运行到的 展开
1个回答
展开全部
呵呵,头一次看见还有这样写的。我明白你的意思,你是想根据request 的id值来判断是加载那一个用户控件。显然你上面的问题出现在你只知道用户控件是如何引入进来的<%@ Register ...%>
<uc1: ......> 。但不知道它是如何运行,如何被解析的。在.aspx页面上这样做是正确的。但你在代码中拼出来<uc1:...>就不对了。为什么?你在后台拼出来渲染到页面上的时候,html页面中只是显示字符串"<uc1:...>"而矣。最终并未被asp.net解析(也就是并未生成用户控件中的内容)。所以你什么也没有看到。正确的做法是动态加载用户控件。你可以在目标位置放置一个容器控件如PlaceHolder,可以使用UserControl uc=Page.LoadControl("XX.ascx"); 来生成一个用户控件的实例,然后再作为子控件加入到容器控件中 ,完整的代码类似:
//假设页面上放置的容器控件PlaceHolder的控件ID为pl
UserControl uc;
if (Reqest["id"]=="1") {
uc=Page.LoadControl("1.ascx");
}else if (Request["id"]=="2") {
uc=Page.LoadControl("2.ascx");
}
//添加到容器控件
pl.Add(uc);
<uc1: ......> 。但不知道它是如何运行,如何被解析的。在.aspx页面上这样做是正确的。但你在代码中拼出来<uc1:...>就不对了。为什么?你在后台拼出来渲染到页面上的时候,html页面中只是显示字符串"<uc1:...>"而矣。最终并未被asp.net解析(也就是并未生成用户控件中的内容)。所以你什么也没有看到。正确的做法是动态加载用户控件。你可以在目标位置放置一个容器控件如PlaceHolder,可以使用UserControl uc=Page.LoadControl("XX.ascx"); 来生成一个用户控件的实例,然后再作为子控件加入到容器控件中 ,完整的代码类似:
//假设页面上放置的容器控件PlaceHolder的控件ID为pl
UserControl uc;
if (Reqest["id"]=="1") {
uc=Page.LoadControl("1.ascx");
}else if (Request["id"]=="2") {
uc=Page.LoadControl("2.ascx");
}
//添加到容器控件
pl.Add(uc);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询