浅谈ASP.NET内部机制(八)

前言:之前几篇文章写了有关视图的知识,也讲述了如何实现IStateManager接口。本篇将讲解如何实 现自定义转换器。当然了,有大量的代码演示!本篇算是有关视图机制的终结篇,还会讲解有关 ControlStatel控件状态的实现。

有个小插曲,其实之前我已经把文章写了一大半,不知道怎么回事,IE出了问题,自动关闭了,真是 心痛阿,现在得重写一遍。我想每个写博文的朋友都有这样的经历吧,写一篇文章真的很不容易!

在上篇中,我们讲解了如何在一个自定义控件中保存自定义类的属性,我现在再次把代码贴出来,免 得大家去翻页。

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace CustomComponents
{
        /**//**//**//**//**//**//**//**//**//**//**//**//**//**//**//// <summary>
        ///MyLogin 的摘要说明
        /// </summary>
        public class MyLogin:WebControl
        {
                属性属性属性属性#region  属性
                public string UserName
                {
                        get
                        {
                                return ViewState["UserName"] != null ? (string)ViewState["UserName"] : "UserName";

                         }
                        set
                        {
                                ViewState["UserName"] = value;
                        }

                }
                public string UserPassword
                {
                        get
                        {
                                return ViewState ["UserPassword"] != null ? (string)ViewState["UserPassword"] : "UserPassword";

                         }
                        set
                        {
                                ViewState["UserPassword"] = value;
                        }

                }
                #endregion

                protected override HtmlTextWriterTag TagKey
                {
                        get
                        {
                                return HtmlTextWriterTag.Table;
                        }
                }

                protected override void RenderContents(HtmlTextWriter writer)
                {
                        //显示用户名
                        writer.RenderBeginTag (HtmlTextWriterTag.Tr);
                        writer.RenderBeginTag (HtmlTextWriterTag.Td);
                        writer.Write(UserName);
                        writer.RenderEndTag();

                        writer.RenderBeginTag (HtmlTextWriterTag.Td);
                        writer.AddAttribute (HtmlTextWriterAttribute.Id, "txtUserName");
                        writer.AddAttribute (HtmlTextWriterAttribute.Type, "text");
                        writer.RenderBeginTag (HtmlTextWriterTag.Input);
                        writer.RenderEndTag();
                        writer.RenderEndTag();
                        writer.RenderEndTag();

                         //显示用户密码
                        writer.RenderBeginTag (HtmlTextWriterTag.Tr);
                        writer.RenderBeginTag (HtmlTextWriterTag.Td);
                        writer.Write(UserPassword);
                        writer.RenderEndTag();

                        writer.RenderBeginTag (HtmlTextWriterTag.Td);
                        writer.AddAttribute (HtmlTextWriterAttribute.Id, "txtPassword");
                        writer.AddAttribute (HtmlTextWriterAttribute.Type, "text");
                        writer.RenderBeginTag (HtmlTextWriterTag.Input);
                        writer.RenderEndTag();
                        writer.RenderEndTag();
                        writer.RenderEndTag();

                         //显示登录按钮
                        writer.RenderBeginTag (HtmlTextWriterTag.Tr);
                        writer.AddAttribute (HtmlTextWriterAttribute.Colspan, "2");
                        writer.AddAttribute (HtmlTextWriterAttribute.Align, "center");
                        writer.RenderBeginTag (HtmlTextWriterTag.Td);
                        writer.AddAttribute (HtmlTextWriterAttribute.Id, "btnSubmit");
                        writer.AddAttribute (HtmlTextWriterAttribute.Type, "submit");
                        writer.AddAttribute (HtmlTextWriterAttribute.Value, "Login");
                        writer.RenderBeginTag (HtmlTextWriterTag.Input);
                        writer.RenderEndTag();
                        writer.RenderEndTag();
                        writer.RenderEndTag();

                 }

        }
}

时间: 2024-08-03 07:48:04

浅谈ASP.NET内部机制(八)的相关文章

浅谈ASP.NET内部机制(六)

前言:大家都听说过也用过ASP.NET中的视图ViewState,到底ViewState本质上到底是什么东西?为什 么ASP.NET中没有他不行?下面就来谈谈... 我们一般在开发面向对象程序的时候,我们都是用对象保存数据的,比如用对象的属性,字段来保存 对象的状态.当调用对象的方法时,就可以改变对象的状态.释放对象后,对象的状态就消失.这点大家 都熟悉.在开发桌面程序的时候,没有什么问题,以为对象都一般在本地的内存中,直到不再用那个对象 ,我们就销毁它.但是在Web程序中,问题就大了,比如我们

浅谈ASP.NET内部机制(七)

前言:本篇讲解与视图ViewState相关的知识,包括IStateManager,自定义转换器TypeConvert,以及和 视图功能相同的控件状态.可以说本篇是对保存状态有关知识的总结,代码也详细的给出. 自从上次写了有关视图的文章后,收到了很多朋友的邮件,很感谢大家的支持:)很多朋友都说要求 说说实践性更强的东西,所以本篇就进一步的来谈谈视图(不仅仅只是视图,而且在ASP.NET中的状态保 存的话题).首先希望大家对自定义控件有一定的了解.大家可以去参看我的控件开发系列. 首先我看从一个简单

浅谈ASP.NET内部机制(五)

前言:本章要谈页面生命周期了,过程挺多的,但是一点都不难.不信可以看看.我尽量的讲的平实 一些,而且理解页面的生命周期对喜欢开发自定义控件和组件的朋友是很有帮助的. 页面生命周期,也就是处理一个页面请求的过程.我们之前就说过了的,不同文件的由不同的处理程 序来处理.而且处理程序都是实现了IHttpHandler接口.这个接口中有两个方法,其中真正用来处理请求 的就是ProcessRequest方法. 所以当我们请求一个页面的时候,我们的页面,假如我们请求的是default.aspx这个页面是继承

浅谈ASP.NET内部机制(四)

前言:在用ASP.NET开发网站的时候,常常看到"生命周期"周期整个词,在ASP.NET AJAX客户端开发时 ,也有生命周期的概念.觉得微软很喜欢引入生命周期.其实生命周期还是蛮好的,可以使得我们对程序 运行的每个过程都可以掌控,提供更加灵活的开发.如果被生命周期弄糊涂了就不好了... 本系列的文章中很少涉及代码,希望大家见谅! 我这里也不想罗列MSDN上的东西.而是想尽量的把相应的知识说的更加通俗.简单的说来,再ASP.NET 运行的时候一般会有两个比较明显的生命周期.一个发生再H

浅谈ASP.NET内部机制(三)

前言:当我们把页面中的数据包含在表单中发送到服务器的时候,数据到底是以什么形式发送的?服 务器接受到提交的数据后是如何读取这些数据,又是如何要决定来引发事件的?我们怎么样才能让我们自 定义的控件能够在服务器端触发事件?为什么服务器控件有的要实 IPostBackEventHandler,IPostBackDataHandler?..... 大家已经在知道,在我们开发ASP.NET网站的时候,每个服务器控件都有自己的ID.为了后面更好的展 开,下面我们就来简单的看看这个场景:当我们在浏览器中点击了

浅谈ASP.NET MVC 3中如何使用Model

昨天博客发了新文章,讲一下我对如何使用MVC中的Model的看法,不是什么大技术,当是一个技术讨论^^ 原文地址:http://www.youguanbumen.net/Article.aspx?id=79 原文: 前两天写了个文章ASP.NET MVC 3 -- Model远程验证,主要记录了一下ASP.NET MVC 3中新增的RemoteAttribute类的使用,得益于这个类,我们可以在模型中为属性配置客户端远程校验的业务,文章中给了出一个简单的实体类MyUser_Add,举了一个最常见

浅谈ASP中Request对象获取客户端数据的顺序

request|对象|客户端|数据 浅谈ASP中Request对象获取客户端数据的顺序 /**描述:在使用ASP Request对象时需要注意的小问题作者:慈勤强Email : cqq1978@yeah.net**/ 在ASP中Request对象是获取客户端提交数据的一个很重要的对象,大家对他也是非常熟悉了.虽然如此,还是经常有人问我下面的几种写法有什么不同,到底应该怎么写?strMessage = Request("msg")strMessage = Request.Form(&qu

浅谈ASP.NET的Postback

说道ASP.NET的Postback,就得说Web Page的生命周期,但是Web Page的生命周期却不是三言两语就能够说得清楚的,所以在这里单纯站的编程的角度,撇开Web Page 的生命周期浅谈Postback. 我们知道,无论是ASP.NET1.x,2.0,甚至是以后的版本,ASP.NET最终Render到Client端通过浏览器浏览的都是一样:一个单纯的HTML.Client通过Submit Form的方式将填入Form的数据提交给Server进行处理.我们现在来看看ASP.NET整个

浅谈ASP.NET的内部机制(二)

前言:大家知不知道,一个Http Request是如何被传递给ASP.NET的?而且ASP.NET是如何知道一个 Http Request是请求的.aspx这样的动态文件还是请求的.htm这样的静态文件?...... 上次已经说到了http.sys和aspnet_filter的功能,希望大家还记得! 当一个请求(也就是http Request)通过了http.sys和aspnet_fitler后,此时这个请求还没有被传递 给ASP.NET的处理程序.但是此时IIS就会在它的MIME Type中查