成长的足迹

追求卓越,成功就会出其不意找上门。
posts - 16, comments - 174, trackbacks - 0, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

Ajax现在已经是相当流行的技术了,Ajax不仅是想服务器端发送消息,更重要的是无刷新的重载页面。

如果页面单纯的使用js来创建,要写大量的代码,而且不直观。

在asp.net中,其实我们可以创建用户自定义控件,通过Ajax请求返回用户自定义控件HTML代码。

 

代码
public static string RangerUsControl(string controlName)
{
StringBuilder build
= new StringBuilder();
HtmlTextWriter htmlWriter
= new HtmlTextWriter(new StringWriter(build));
UserControl uc
= new UserControl();
Control ctrl
=uc.LoadControl(controlName+".ascx");//加载用户定义控件
           
            TextBox txtBox1 = ctrl.FindControl("TextBox1") as TextBox;//获得id为“TextBox1”的控件
            txtBox1.Text = "测试"; //给控件初始化
            string result;
try
{
ctrl.RenderControl(htmlWriter);
}
catch { }
finally
{
htmlWriter.Flush();
result
=build.ToString();
}

return result;//返回控件的HTML代码
}

htmlWriter.Flush();

 

 

 

Feedback

#1楼  回复 引用 查看   

2010-03-13 16:05 by ruinet      
太过去简单,还得考虑给用户控件传参数

#2楼  回复 引用 查看   

2010-03-13 18:41 by 游戏人间      
怎么交互呢

#3楼  回复 引用 查看   

2010-03-13 18:43 by MySoft      
这样做似乎真没什么意义,控件里的参数该如何传递呢?

#4楼[楼主]  回复 引用 查看   

2010-03-13 19:31 by chingho      
@MySoft
@游戏人间
@ruinet

假设在我们自定义控件中,有一个id为“TextBox1”的文本框。

TextBox txtBox1 = ctrl.FindControl("TextBox1") as TextBox;//获得id为“TextBox1”的控件
txtBox1.Text = "测试"; //给控件初始化



这样我们就可以给控件的参数赋值了。

#5楼  回复 引用 查看   

2010-03-13 20:00 by MySoft      
引用chingho:
@MySoft
@游戏人间
@ruinet

假设在我们自定义控件中,有一个id为“TextBox1”的文本框。

TextBox txtBox1 = ctrl.FindControl("TextBox1") as TextBox;//获得id为“TextBox1”的控件
txtBox1.Text = "测试"; //给控件初始化



这样我们就可以给控件的参数赋值了。


其实你这样处理似乎太牵强了。其实有更好的办法处理参数问题。
定义一个接口
public interface IParamUserControl
{
void SetControlParam(IDictionary<string, object> dictParam)
}

然后让UserControl继承这个接口然后实现这个方法
public void SetControlParam(IDictionary<string, object> dictParam)
{
//这里给控件里的子控件赋值
}

ctrl.RenderControl(htmlWriter);在这句之前加上
if(ctrl is IParamUserControl)
(ctrl is IParamUserControl).SetControlParam(dictParam);

dictParam可以从外部传入,这样就实现了控件赋值了!

#6楼[楼主]  回复 引用 查看   

2010-03-13 21:07 by chingho      
5楼的方法,也不失为一种好方法。

#7楼  回复 引用 查看   

2010-03-13 21:36 by a-peng      
还有一种作法,也是我现在在用的,用jQuery ajax直接请求一个preview.aspx页面取html,在这个页面去动态加载需要的控件或者进一步做一些处理。

#8楼  回复 引用 查看   

2010-03-15 00:08 by 活雷锋      
我现在的做法和楼上比较类似

ajax---> hander.ashx|aspx 按条件读取数据-->读静态html文件 这个html文件里放入需要的块HTML 替换标签 返回stirng
个人感觉写着很爽

#9楼  回复 引用 查看   

2010-03-15 10:29 by 彦斌      
引用活雷锋:
我现在的做法和楼上比较类似

ajax---> hander.ashx|aspx 按条件读取数据-->读静态html文件 这个html文件里放入需要的块HTML 替换标签 返回stirng
个人感觉写着很爽

你这方法看过去不错,可否写篇示例文章吗? 谢谢!