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\" />";

}

}
显示是空白的,我跟踪了下都运行到的
展开
 我来答
Reyzhang
2011-05-22 · TA获得超过1111个赞
知道小有建树答主
回答量:805
采纳率:85%
帮助的人:665万
展开全部
呵呵,头一次看见还有这样写的。我明白你的意思,你是想根据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);
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式