特别关注 用户控件 的page 高手们请教

jiege 2011-01-14 01:45:31
我有一个用户控件.ascx 我怎样去得到page的属性
假如地址栏为: 。。。?id=。。
得到地址栏的值
...全文
257 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiege 2011-01-16
  • 打赏
  • 举报
回复
哎 难道兄弟们不能具体给个方案吗
jiege 2011-01-14
  • 打赏
  • 举报
回复
大哥我真的人你了 受教了。
我现在的程序大致上的目标是类似与qq空间的页面布局,包括模块的拖动,保存(容器),添加,与删除。并生成静态页面(这些我倒是完成了)。
剩下的是布局,将容器变成三列或者两列,或者其他。我现在的想法就是布局方面的 如:
script type="text/javascript" language="javascript">
function bujuLayout(layoutID)
{
alert(layoutID);
$.post("demo.aspx", {p:"mkbianhua",sort:layoutID,id:<%=id %>},function(mes2){
window .location = "demo.aspx?id="+mes2;
});
}
</script>
<table width="99%" border="0" align="center" cellpadding="3" cellspacing="1">
<tbody>
<asp:DataList ID="LayOutBuJu" runat="server">
<ItemTemplate>
<tr>
<td><%#Eval("Style") %></td>
<td><input id="btnLayOut" type="button" value="点" onclick="bujuLayout('<%#Eval("ID") %>')" /> </td>
</tr>
</ItemTemplate>
</asp:DataList>
</tbody>
</table>
</div>

放在ascx中,一些东西(如 容器的位置什么的)放在数据库中 读取文件流,做相应的修改,并输出,将原来的aspx给覆盖。
我的表达不是那么清楚、专业。不知大哥你是否明白。
我现在的比较麻烦,不知大哥你有没更好的方法,指导一下。
哎 后面的更难。
  • 打赏
  • 举报
回复
你访问aspx文件的目的,就是为了取得mes2的值对吗?
  • 打赏
  • 举报
回复
嗯,我理解为:你只是了解到使用aspx作为$.post的服务好了。这是最沉重的做法,不过你既然需要ascx控件,看来也是受到别人的死板设计的限制(没有界面的服务就不应用面向界面的控件来搭建)。

按照你的写法,那么你可以在Page的 Page_PreRender 事件中,输出结果。可惜,我还是不知道你要返回的id如何取得?!而这个返回值

例如
protected void Page_PreRender(object sender,EventArgs para)
{
Response.Clear();
Response.Write(你要返回的id值);
Response.End(); //这一行不能缺少。否则就是返回整个页面的html内容了。
}
  • 打赏
  • 举报
回复
呵呵,看不懂,就为了得到一个返回id,要加载aspx,而且还要加载ascx?如果不需要重建整个控件树,那么应该访问ashx、asmx等,而不是aspx。

Page运行的结果本来就是输出整个html内容(而不是什么id这么简单的东西),所以就算你的 RenderControl 写对了地方,也看不出有什么必要要写它,因为即使不写他,page也照样是输出那些html内容。

看不懂你的程序到底要做什么。

按照你要取得的id,重新构思你的程序到底要做什么吧。就算在csdn上抄代码,也是要一定的基础的。
jiege 2011-01-14
  • 打赏
  • 举报
回复
大哥,就这样称呼您们了,在aspx中的我这样写 ,到进入了ascx中 但两个都需要得到句柄,就有出错了
System.Web.UI.Page page = new System.Web.UI.Page();
System.Web.UI.Control control = page.LoadControl("~/UserControl/LayOutCss.ascx");
page.Controls.Add(control);
StringWriter writer = new StringWriter();

Server.Execute(page, writer, true);

Response.Write(writer.ToString());
jiege 2011-01-14
  • 打赏
  • 举报
回复
大哥 这个我也不是那么清楚。那个是我在咱们的论坛上复制的啊。我都还没有明白那是什么东东的,脑子有点不转了。
.ascx中有
script type="text/javascript" language="javascript">
function bujuLayout(layoutID)
{
alert(layoutID);
$.post("demo.aspx", {p:"mkbianhua",sort:layoutID,id:<%=id %>},function(mes2){
window .location = "demo.aspx?id="+mes2;
});
}
</script>
<table width="99%" border="0" align="center" cellpadding="3" cellspacing="1">
<tbody>
<asp:DataList ID="LayOutBuJu" runat="server">
<ItemTemplate>
<tr>
<td><%#Eval("Style") %></td>
<td><input id="btnLayOut" type="button" value="点" onclick="bujuLayout('<%#Eval("ID") %>')" /> </td>
</tr>
</ItemTemplate>
</asp:DataList>
</tbody>
</table>
</div>

一方面我想click后进入它的load事件中 令一方面我想得到id的值(句柄)。


我应该怎样去处理 ,大哥帮帮忙
  • 打赏
  • 举报
回复
这时候页面生命周期也刚刚开始十分之一 --> 这时候页面生命周期也刚刚执行十分之一,90%的必要代码都没有执行
  • 打赏
  • 举报
回复
打个比方吧,骑一辆自行车,必须是脚蹬子跟车轮连在一起的。你不能把脚蹬子卸下来独自骑着,却去责怪车轮子为什么不转吧?!

那么你在page的load中去执行什么page.RenderControl(wt),这时候页面生命周期也刚刚开始十分之一,你能想得到什么结果?
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 henhaowo 的回复:]
protected void Page_Load(object sender, EventArgs e)
{
Page page = new Page();//这里新建了一个page对像,不是当前的page对像
System.Web.UI.UserControl control = (System.Web.UI.UserControl)page.LoadControl("/Pay/Nav.ascx");
page.Controls.Add(control);//在新建的page对像中加载进去
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter wt = new HtmlTextWriter(tw);
page.RenderControl(wt);//在新建的page对像 输出html
//control.RenderControl(wt);
Response.Write(tw.ToString());
}
}
[/Quote]
这是什么?为什么写在page的load中?有什么理由吗?
jiege 2011-01-14
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yangyalin8425 的回复:]
你把用户控件托到Demo.aspx上不就行了
[/Quote]

不就是这些东西吗 <%@ Register Src="~/UserControl/LayOutCss.ascx" TagName="LayOutCss" TagPrefix="LayOut" %>
<LayOut:LayOutCss ID="Layout" runat="server" />
yangyalin8425 2011-01-14
  • 打赏
  • 举报
回复
你把用户控件托到Demo.aspx上不就行了
jiege 2011-01-14
  • 打赏
  • 举报
回复
public partial class Template2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Page page = new Page();//这里新建了一个page对像,不是当前的page对像
System.Web.UI.UserControl control = (System.Web.UI.UserControl)page.LoadControl("/Pay/Nav.ascx");
page.Controls.Add(control);//在新建的page对像中加载进去
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter wt = new HtmlTextWriter(tw);
page.RenderControl(wt);//在新建的page对像 输出html
//control.RenderControl(wt);
Response.Write(tw.ToString());
}
}

public partial class Nav : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e) //在新建的page不执行load事件
{
Response.Write("OK"); }
}

上边是我在网上搜的有关信息 ,说法很多 ,但我现在还没有实现对ascx的load访问
  • 打赏
  • 举报
回复
什么叫“直接访问”?

lz是女生吗?好象是。
jiege 2011-01-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sp1234 的回复:]
Page的Page_load之后,就会触发用户控件的Page_load。
[/Quote]

这个不能直接访问
jiege 2011-01-14
  • 打赏
  • 举报
回复
恩 这个我现在也知道不能直接访问。
但我查了一下 网上有介绍的 但我也没有实现。
呵呵 就想问一下怎样去访问
一个是layout.ascx 一个是demo.aspx
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 henhaowo 的回复:]

恩 那个问题先暂不考虑 ,能不能先请教一下。

怎样进入ascx的Page-load事件中
[/Quote]

不懂什么意思?怎样“进入”?Page的Page_load之后,就会触发用户控件的Page_load。
ycproc 2011-01-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 henhaowo 的回复:]

Web用户控件 为什么不能进行访问
[/Quote]
我的意思是 不能直接 访问 你的意思是什么
jiege 2011-01-14
  • 打赏
  • 举报
回复
恩 那个问题先暂不考虑 ,能不能先请教一下。

怎样进入ascx的Page-load事件中
  • 打赏
  • 举报
回复
this.Page.Request.QueryStrng[...]
加载更多回复(4)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧