怎样利用Ajax动态加载用户控件?

chating 2006-03-13 01:38:07

如题,注意是用户控件(.ascx)
...全文
553 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
chating 2006-03-28
  • 打赏
  • 举报
回复
protected System.Web.UI.WebControls.PlaceHolder ph1;

private void Page_Load(object sender, System.EventArgs e)
{
Ajax.Utility.RegisterTypeForAjax(typeof(WebForm1));
}

[Ajax.AjaxMethod]
public void LC(){
Containers Containers1 = new Containers();
ph1.Controls.Add(Containers1);
}

<script language=javascript>
document.ondblclick = function(){
WebForm1.LC(cb_1);
}

function cb_1(r){
alert(r.value);
}
</script>

采用狼的做法,程序没有运行到CreateChildControls,不能加载 :( ??
chating 2006-03-25
  • 打赏
  • 举报
回复
狼兄的方法很独特: 既然不可以动态加载用户控件,而但是可以加载用户子定控件,于是在用户自定义控件中CreateChild加入用户控件。这样,ajax只要加载用户自定义控件即可。


思路不错!! 待我试试看。
超级大笨狼 2006-03-24
  • 打赏
  • 举报
回复
自定义控件中动态加载用户控件
自己写个自定义控件,如 要想每次使用Containers时就自动有页眉和页脚,一种方法就是在在做Containers的时候自己在里面加html元素。但是这中方法麻烦,也不容
易便于以后的修改。所以就把页眉和页脚分别做成两个用户控件:Header.ascx,Footer.ascx。这样再在Containers里动态加载他们。
Containers的代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;


namespace WebComponents{
/// Containers自定义控件
[ParseChildren(true)]
//可以创建子控件
public class Containers : Control,INamingContainer
{
public Containers() { }
private ITemplate itemTemPlate; [TemplateContainer(typeof(Containers))]
public ITemplate ItemPlate//项模板
{ get{return itemTemPlate;} set{itemTemPlate=value;} }
protected override void CreateChildControls()
{
this.Controls.Clear();
Control Header=Page.LoadControl("Header.ascx");
//动态加载Header.ascx,也可判断何时加载 Controls.Add(Header);
Control Footer=Page.LoadControl("Footer.ascx");
Controls.Add(Footer);
}
} }
这样你在Header.ascx,Footer.ascx里设置好内容就可以使用。当然也可以缓存起来

wwwsyz 2006-03-24
  • 打赏
  • 举报
回复
我写了一个框架里面有处理用户控件的一些实现,你看下是否有帮助.
http://tz.yndns.com/controldemo/ZeroAjaxDemo/index.htm
chating 2006-03-22
  • 打赏
  • 举报
回复
SVG(ben),

说说你怎么实现的。
SVG 2006-03-22
  • 打赏
  • 举报
回复
我已经说了.
zorou_fatal 2006-03-21
  • 打赏
  • 举报
回复
使用Magicajax.net的控件可以很容易达到你的要求
尚和空四 2006-03-21
  • 打赏
  • 举报
回复
关注
SVG 2006-03-21
  • 打赏
  • 举报
回复
可能是你具体问题的原因吧.
我从前经历过的一个项目, 已经可以Load一个User Control的HTML,
此user control有asp:textbox, asp:label和asp:checkbox==
chatingyu 2006-03-20
  • 打赏
  • 举报
回复
彭斌 说的方法 (在另一个单独处理ajax加载用户控件清酒) 我试过, 不行.

聪明的大灰狼 , 好像没有明白我说得意思..是用户控件,不是web控件,不是html控件,也不是自定义用户自定义控件,这三者肯定可以..我说的是加载用户控件(.ascx)..

超级大笨狼 2006-03-19
  • 打赏
  • 举报
回复
可以加载再隐藏,如果可能加载多个,用客户端的好了。
或者你用Reapter先绑上,再用AJAX确定绑的dataSource
SVG 2006-03-19
  • 打赏
  • 举报
回复
你也认识彭斌, 他是我的哥们.

用户控件是可以RenderControl, 不过它的page确实为空, 要用HttpContext来取,
再建议将RenderControl写在用户控件里, 为什么, 因为可以利用它的this.RenderControl
再注意一点, 用户控件的Page_Load方法不会执行的.
Scarroot 2006-03-18
  • 打赏
  • 举报
回复
mark
YSEE 2006-03-17
  • 打赏
  • 举报
回复
我自己用的方法是把控件内容写到XML调用。
有个问题就是STRING的长度吧。不过分小点应该没问题。我用了感觉还行。
chating 2006-03-17
  • 打赏
  • 举报
回复
彭斌: 请教个问题: 怎样利用Ajax动态加载用户控件? http://community.csdn.net/Expert/topic/4611/4611001.xml?temp=.2144892
chating: 服务器控件?
彭斌: 嗯,是用户控件.不是html控件,不是web控件,也不是用户自定义控件:
chating: 服务器控件是要与编译的,理论上无法加载,但是你可以采取条件判断方式实例化
彭斌: ???
chating: 刚才理解有点偏差
彭斌: 服务器控件,如html控件,web控件,自定义控件等..可以用new 来使用.然后用RenderControl输出成html可以..但是用户控件就不能吧
chating: 如果你异步调用,可以请求一个page
彭斌: 简单来讲.我需要实现的工那是,菜单上的项用ajax导航, 加载类容区的用户控件..
chating: ajax你用什么空间?
彭斌: .net 1.1
彭斌: ajax.net ajaxpro
chating: 有一些是直接实例化一个页面的,日周调用页面下标示有ajax的方法,这个时候可以使用Load方法来加载
彭斌: Load
彭斌: ?? Page.LoadControl('')么?
chating: LoadControl("pagelet7.ascx"):
chating: 是的
chating: 这个的前提是,Page页面要被实例化
chating: ajax请求的时候有几种实现方式,一个是实例化你当前的页面,还有一个是实例化一个特定的页面
chating: 你应该对ajax的底层了解一下,这个问题就不存在了
彭斌: 嗯.对的,但是ajax异步请求是,page为null.这个就是问题的所在: 而页面不刷新.
chating: page为null,不是页面不刷新导致的
彭斌: 怎么队当前页面的page实例化呢?
彭斌: 具体些
chating: ajax有很多种控件,你用的应该是名词请求都是通过同样一个页面,这个页面可能并不存在,只是一个httphander的类
chating: 这个时候你当前页面当然是null啦
chating: 大多数ajax控件都是我上述的方式实现
彭斌: 嗯,对的, 我用的是ajax.net .就是基于这个实现的.
彭斌: 那么怎么解决呢? 需要自己些ajax fcl么?
彭斌: 我看到些
chating: 你只要在web.config中配置一些httphander就可以。但是你也可以用ajax请求当前的页面,也就是再实例化一次当前页面在服务器端,但是不回发到客户端,这个时候就是没有刷新了,你实例化的目的只是要使用那个页面下的某个类。 我目前只有在cs 2.0中看到这样的用法,我觉得效率比较低,但是page就不是null了
彭斌: 我看到x2blog中用的prototype1.3.1.js封装处理ajax实现的..
彭斌: 对啊,这样的效率是个问题..cs1.1 不支持??
chating: ajax 还是一种http请求,所以请求的页面依然是存在的,只是你请求的页面不是当前页面而已
chating: 所以当前页面的page就是null
chating: cs1.1就没有使用ajaxc
彭斌: x2blog中就是统一采用 ajax.aspx 统一处理这个http请求.. 那么看来.如果我也采用这种方式.然后.将ajax.aspx中输出的html采用dhtml加入当前页面可以么?
彭斌: 因为在ajax.aspx中就没有 page为null的错误了?
chating: 对,在ajax.aspx页面下的page一定不会是null
chating: 你可以尝试一下。我并使用的都是对当前页面请求的ajax,我是用经验来理解另外一种请求方式的,具体的你需要测试一下就知道了
彭斌: 我试试先,多谢
chating: :)
... ...
chatingyu 2006-03-16
  • 打赏
  • 举报
回复
老孟也有出错的时候啊..

注意到: ajax 异步请求时, page为null...注意到了么?


你说的方法我先前就试过,不行的..
YSEE 2006-03-13
  • 打赏
  • 举报
回复
这个方法可以?不用刷新的吗?
孟子E章 2006-03-13
  • 打赏
  • 举报
回复
你可以用LoadControl方法来加载

Dim c1 As Control = LoadControl("pagelet7.ascx")
CType(c1, (Pagelet7VB)).Category = "business"
Page.Controls.Add(c1)
chating 2006-03-13
  • 打赏
  • 举报
回复
环境.net 1.1

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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