最近学到的一些东西
声明:以下代码,均来自其他博客,如冒犯相关作者,还请原谅
在ashx,页面实现如下代码,需要 System.Net.Json;是JSON官方网站推荐的一个dll
public void ProcessRequest( HttpContext context )
{
context.Response.ContentType = "text/plain";
ViewManager<AuthenticatedUserTicket> viewManager = new ViewManager<AuthenticatedUserTicket>();
AuthenticatedUserTicket control = viewManager.LoadViewControl( "~/RenderControl/AuthenticatedUserTicket.ascx" );
JsonObjectCollection collection = new JsonObjectCollection();
collection.Add( new JsonStringValue( "name" , viewManager.RenderView( control ) ) );
context.Response.Write( context.Request.QueryString["jsoncallback"] + "(" + collection + ")" );
}
用jquery调用此ashx页面,可得到json对象
调用代码
$.getJSON("http://kevinshi.hi.ourivy.com/HttpHandlers/FetchAuthenticationTicketHandler.ashx?jsoncallback=?",
function(data) {
$("#divHeaderLink").html(data.name);
在ashx页面用到了 viewmanager这个类,它的解释如下
ViewManager中只有两个方法:LoadViewControl和RenderView。LoadViewControl方法的作用是创建一个Control实例并返回,RenderView方法的作用则就是生成HTML了。这个实现方式的技巧在于使用了一个新建的Page对象作为生成控件的“容器”,而最后其实我们是将Page对象的整个生命周期运行一遍,并且将结果输出。由于这个空的Page对象不会产生任何其他代码,因此我们得到的,就是用户控件生成的代码了。
在搜索viewmanager 资料时,还发现了如下的话,感觉不错,一并摘录
使用UserControl进行HTML代码生成是一个十分常用的技巧。尤其在AJAX应用越来越普及的情况下,合理使用上面提到的方式可以方便的为我们的应用添加AJAX效果。而且很多情况下,我们即使不需要在页面上显示内容,也可以将内容使用UserControl进行编辑。因为编写UserControl比拼接字符串的方式无论是在开发效率上还是可维护性上都高出许多。由于这个方式其实使用了WebForms这个久经考验的模型,因此在执行效率方面也是相当高的。此外,就刚才的例子来说,使用UserCotrol进行HTML生成还有其他好处:
- 页面呈现逻辑只实现了一次,提高了可维护性。
- 不会影响页面的SEO,因为在客户端<a />的href还是有效的。