1、请描述一下.net的页面访问基本过程,以及和普通Web访问过程的区别(请
描述从web页面请求到页面返回的主要事件和过程); 2、怎样理解web应用程序的“无状态编程”? 3、请你列举你最熟悉的WebControl以及他们的主要功能; 4、请你列举你最熟悉的.net名称空间以及他们的主要内容。 5、您经常访问哪些有关.net的网站? 6、 在.net中,请描述有哪些办法可以防止页面刷新局部内容闪烁问题(例如
某个聊天页面,每隔几秒就自动刷新,怎样防止闪烁)? 7、请描述一下在.net中Forms认证模式下,怎样用代码(用户名单存在数据库
中,而不是WebConfig中)实现一个基于角色的授权? 8、在Vs.net中,怎样配置数据库连接,可以使开发环境到应用环境迁移数据库
时不修改程序? 9、假设有一个数据库字段name,需要在网页中只显示该字段的姓,而隐藏名
字,类似“张**”形式,请写出数据绑定的自定义表达式。 10、请简单描述一下制作一个用户控件(UserControl)的过程。 11、您有没有制作过自定义的webcontrol(注意不是用户控件)?如果有,请
描述一下自定义控件制作基本过程,主要重载哪些方法?。 12、请描述构成ADO.net的主要对象以及他们的作用。
描述从web页面请求到页面返回的主要事件和过程); 2、怎样理解web应用程序的“无状态编程”? 3、请你列举你最熟悉的WebControl以及他们的主要功能; 4、请你列举你最熟悉的.net名称空间以及他们的主要内容。 5、您经常访问哪些有关.net的网站? 6、 在.net中,请描述有哪些办法可以防止页面刷新局部内容闪烁问题(例如
某个聊天页面,每隔几秒就自动刷新,怎样防止闪烁)? 7、请描述一下在.net中Forms认证模式下,怎样用代码(用户名单存在数据库
中,而不是WebConfig中)实现一个基于角色的授权? 8、在Vs.net中,怎样配置数据库连接,可以使开发环境到应用环境迁移数据库
时不修改程序? 9、假设有一个数据库字段name,需要在网页中只显示该字段的姓,而隐藏名
字,类似“张**”形式,请写出数据绑定的自定义表达式。 10、请简单描述一下制作一个用户控件(UserControl)的过程。 11、您有没有制作过自定义的webcontrol(注意不是用户控件)?如果有,请
描述一下自定义控件制作基本过程,主要重载哪些方法?。 12、请描述构成ADO.net的主要对象以及他们的作用。
.NET同普通的WEB运行机制基本一样,其重大的改进或者功能的提升是引入了POSTBACK技术,能自动根据上次的VIEWSTATE和本次POSTBACK的数据进行比较,触发相应的事件,同时POSTBACK技术减少了我们在ASP时代需要手动把POST数据通过REQUEST获取的工作量。2——
WEB的无状态编程源于HTTP协议本身的无状态。因为每次HTTP请求的前后,我们都没有办法确定客户端(浏览器)的具体状态。3——
这个就慢慢用了。4——
同3。5——
CSDN、博客园6——
通过XML对象或隐藏的IFRAME/FRAME对象来获取页面数据,然后再动态的把新数据写到显示的内容中7——
关注。
把数据库连接信息写到CONFIG文件中。9——
#DataBinder.Eval(Container.DataItem,"name").ToString().SubString(0,1)10——
创建一个USERCONTROL,然后把需要的控件放进去,写需要的代码。11——
做过。要重载哪些方法不确定,视控件的功能和复杂度的不同而不同。一般的有VIEWSTATE操作方法、CONTROL创建方法、RENDER方法等。12——
COMMAND
CONNECTION
DATAADAPTER
COMMANDBUILDER
太多了。
某个聊天页面,每隔几秒就自动刷新,怎样防止闪烁)?
使用xmlhttp
<html>
<head>
<title>Lion互动网络==》在客户端用XmlHttp取得服务器端的DataSet数据</title>
<meta http-equiv="Pragma" content="no-cache">
</head>
<body>
<INPUT id="Button1" onclick="GetDataSet()" type="button" value="取得XmlHttp.Aspx中的DataSet以Xml形式显示"
name="Button1">
<div id="abc"><FONT face="宋体"></FONT></div>
<script language="jscript">
function CreateXMLHTTP()
{
try{return new ActiveXObject('MSXML2.XMLHTTP');}catch(x){}
try{return new ActiveXObject('Microsoft.XMLHTTP');}catch(x){}
throw(new Error(-1,'不能创建XMLHTTP'));
}
function GetDataSet()
{
var xmlhttp = CreateXMLHTTP();
var url = document.location.href;
url = url.substring(0,url.lastIndexOf("\/")+1)+"XMLHTTP.aspx";
xmlhttp.open("GET",url,false)
xmlhttp.setRequestHeader("Content-Type","text/xml")
xmlhttp.send()
abc.innerText = (xmlhttp.responseXML.xml);
}
</script>
</body>
</html> XMLHTTP.aspx
<%@ Page language="c#" Codebehind="XMLHTTP.aspx.cs" Src="XMLHTTP.aspx.cs" AutoEventWireup="false" Inherits="Exam.WebForm1" %>XMLHTTP.aspx.cs
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;namespace Exam
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
System.Data.DataTable DT = new System.Data.DataTable("temptable");
DT.Columns.Add("ID",typeof(int));
DT.Columns.Add("Name",typeof(string));
DT.Columns.Add("AddTime",typeof(DateTime));
DT.Columns[0].AutoIncrement = true;
DT.Columns[0].AutoIncrementSeed = 1;
DT.Columns[0].AutoIncrementStep = 1;
for(int i=0;i<20;i++)
{
System.Data.DataRow dr= DT.NewRow();
dr[1] = "欢迎光临Lion互动网络,第 "+ (i+1) +" 行";
dr[2] = System.DateTime.Now.AddDays(i);
DT.Rows.Add(dr);
}
System.Data.DataSet ds = new System.Data.DataSet("Root");
ds.Tables.Add(DT);
Response.Buffer=true;
Response.CacheControl="no-cache";
Response.ContentType = "text/xml";
Response.Clear();
Response.Write("<?xml version='1.0' encoding='gb2312'?>");
Response.Write(ds.GetXml());
Response.End();
DT.Clear();
DT.Dispose();
ds.Clear();
ds.Dispose();
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
}
}
你好,你的xmlhttp怎么点击按钮,页面没有任何显示呢?
2.HTTP是个无法保存状态的协议,具体不知道怎么说,呵呵
3.datagrid ,textbox.button.datalist..............
4.system.web.system.io...................
5.www.gotdotnet.com,www.codeproject.com.bbs.mvpcn.net..............
其它的不说了,那么多,累死人了
System.Data.SqlClient sql数据操作类,SqlConnection SqlCommand SqlDataAdapter SqlDataReader在这里
System.Text 字符处理类
System.IO 文件处理 ,流处理
System.Collection 集合类数据结构都在这里
System...WebControl web控件全在这里
System.. 安全类,忘了名字5. www.codeproject.com
www.csdn.net
msdn6.javascript,异步xmlhttp, 或者javascript调web services,对返回的xml数据进行格式化处理7.写cookies时写入数据库的角色信息8.写在web.config中,或加密保存注册表9.10.添加一个用户控件,像做aspx页面一样的放控件,写代码11.Rend()方法管理最后的html输出,PreRend()中注册javascript,CreateChildControl()方法创建子控件结构,DataBind()方法调用CreateChildControl()12.DataSet SqlConnection SqlCommand SqlDataAdapter SqlDataReader
dateset 断开的数据集,在断开连接的情况下,操作数据
data adapter 适配器,对dataset datatable 操作
datatable 类似dataset,但是是单表,dataset可以同时存储多表
command 命令对象,可以执行增删改的操作
我主要就用这些
获得客户端的post请求-〉page类的继承类被构造-〉page类的ProcessRequest方法被调用->init事件被执行->page类的虚函数CreateChildControls被调用->服务器端控件的状态(来自post变量和ViewState)被存储->load事件被执行->我们自定义的服务器端控件的事件被执行->PreRender事件被执行->page类的虚函数Render方法被调用->page类的虚函数RenderChildren方法被调用->Http响应发往客户端->unload事件被执行->page类的继承类被解构。2,客户端,服务端分离,每次postback,重新生成页面,无法保存当前状态值.3,WebControl多的是,查msdn就是了,还要说主要功能???4,.net名称空间也要问,晕.5,csdn6,"防止刷新",如果除非<meta http-equiv="refresh" content="5"> ;setTimeout("document.location='www.usa.com'",3000) 否则它怎么会自己刷新呢
7,
Forms身份验证基本原理: 一 身份验证 要采用Forms身份验证,先要在应用程序根目录中的Web.config中做相应的设置: <authentication mode="forms">
<forms name=".ASPXAUTH " loginUrl="/login.aspx" timeout="30" path= "/">
</forms>
</authentication> 其中<authentication mode= "forms"> 表示本应用程序采用Forms验证方式。
1. <forms>标签中的name表示指定要用于身份验证的 HTTP Cookie。默认情况下,name 的值是 .ASPXAUTH。采用此种方式验证用户后,以此用户的信息建立一个FormsAuthenticationTicket类型的身份验证票,再加密序列化为一个字符串,最后将这个字符串写到客户端的name指定名字的Cookie中.一旦这个Cookie写到客户端后,此用户再次访问这个web应用时会将连同Cookie一起发送到服务端,服务端将会知道此用户是已经验证过的. 再看一下身份验证票都包含哪些信息呢,我们看一下FormsAuthenticationTicket类:
CookiePath: 返回发出 Cookie 的路径。注意,窗体的路径设置为 /。由于窗体区分大小写,这是为了防止站点中的 URL 的大小写不一致而采取的一种保护措施。这在刷新 Cookie 时使用
Expiration: 获取 Cookie 过期的日期/时间。
IsPersistent: 如果已发出持久的 Cookie,则返回 true。否则,身份验证 Cookie 将限制在浏览器生命周期范围内。
IssueDate: 获取最初发出 Cookie 的日期/时间。
Name: 获取与身份验证 Cookie 关联的用户名。
UserData :获取存储在 Cookie 中的应用程序定义字符串。
Version: 返回字节版本号供将来使用。
2. <forms>标签中的loginUrl指定如果没有找到任何有效的身份验证 Cookie,为登录将请求重定向到的 URL。默认值为 default.aspx。loginUrl指定的页面就是用来验证用户身份的,一般此页面提供用户输入用户名和密码,用户提交后由程序来根据自己的需要来验证用户的合法性(大多情况是将用户输入信息同数据库中的用户表进行比较),如果验证用户有效,则生成同此用户对应的身份验证票,写到客户端的Cookie,最后将浏览器重定向到用户初试请求的页面.一般是用FormsAuthentication.RedirectFromLoginPage 方法来完成生成身份验证票,写回客户端,浏览器重定向等一系列的动作. public static void RedirectFromLoginPage( string userName, bool createPersistentCookie, string strCookiePath ); 其中:
userName: 就是此用户的标示,用来标志此用户的唯一标示,不一定要映射到用户账户名称.
createPersistentCookie: 标示是否发出持久的 Cookie。
若不是持久Cookie,Cookie的有效期Expiration属性有当前时间加上web.config中timeout的时间,每次请求页面时,在验证身份过程中,会判断是否过了有效期的一半,要是的话更新一次cookie的有效期;若是持久cookie,Expiration属性无意义,这时身份验证票的有效期有cookie的Expires决定,RedirectFromLoginPage方法给Expires属性设定的是50年有效期。
strCookiePath: 标示将生成的Cookie的写到客户端的路径,身份验证票中保存这个路径是在刷新身份验证票Cookie时使用(这也是生成Cookie的Path),若没有strCookiePath 参数,则使用web.config中 path属性的设置。 这里可以看到,此方法参数只有三个,而身份验证票的属性有七个,不足的四个参数是这么来的:
IssueDate: Cookie发出时间由当前时间得出,
Expiration:过期时间由当前时间和下面要说的<forms>标签中timeout参数算出。此参数对非持久性cookie有意义。
UserData: 这个属性可以用应用程序写入一些用户定义的数据,此方法没有用到这个属性,只是简单的将此属性置为空字符串,请注意此属性,在后面我们将要使用到这个属性。
Version: 版本号由系统自动提供. RedirectFromLoginPage方法生成生成身份验证票后,会调用FormsAuthentication.Encrypt 方法,将身份验证票加密为字符串,这个字符串将会是以.ASPXAUTH为名字的一个Cookie的值。这个Cookie的其它属性的生成:Domain,Path属性为确省值,Expires视createPersistentCookie参数而定,若是持久cookie,Expires设为50年以后过期;若是非持久cookie,Expires属性不设置。
生成身份验证Cookie后,将此Cookie加入到Response.Cookies中,等待发送到客户端。
最后RedirectFromLoginPage方法调用FormsAuthentication.GetRedirectUrl 方法获取到用户原先请求的页面,重定向到这个页面。 3. <forms>标签中的timeout和path,是提供了身份验证票写入到Cookie过期时间和默认路径。 以上就是基于Forms身份验证的过程,它完成了对用户身份的确认。下面介绍基于Forms身份验证的访问授权。
<forms name=".ASPXAUTH " loginUrl="/login.aspx" timeout="30" path= "/">
</forms>
</authentication> /login.aspx验证用户合法性页面中,在验证了用户的合法性后,还要有个取得此用户属于哪些role的过程,这个看各个应用的本身如何设计的了,一般是在数据库中会有个use_role表,可以从数据库中获得此用户属于哪些role,在此不深究如何去获取用户对应的role,最后肯定能够获得的此用户对应的所有的role用逗号分割的一个字符串。
在上面的非基于角色的方法中,我们用了FormsAuthentication.RedirectFromLoginPage 方法来完成生成身份验证票,写回客户端,浏览器重定向等一系列的动作。这个方法会用一些确省的设置来完成一系列的动作,在基于角色的验证中我们不能用这一个方法来实现,要分步的做,以便将一些定制的设置加进来: 1. 首先要根据用户标示,和用户属于的角色的字符串来创建身份验证票
public FormsAuthenticationTicket(
int version, //设为1
string name, //用户标示
DateTime issueDate, //Cookie 的发出时间, 设置为 DateTime.Now
DateTime expiration, //过期时间
bool isPersistent, //是否持久性(根据需要设置,若是设置为持久性,在发出
cookie时,cookie的Expires设置一定要设置)
string userData, //这里用上面准备好的用逗号分割的role字符串
string cookiePath // 设为"/",这要同发出cookie的路径一致,因为刷新cookie
要用这个路径
); FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket (1,"kent",DateTime.Now, DateTime.Now.AddMinutes(30), false,UserRoles,"/") ; 2. 生成身份验证票的Cookie
2.1 将身份验证票加密序列化成一个字符串
string HashTicket = FormsAuthentication.Encrypt (Ticket) ;
2.2 生成cookie
HttpCookie UserCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket) ;
FormsAuthentication.FormsCookieName 是用来获取web.config中设置的身份验证cookie的名字,缺省为" .ASPXAUTH".
若身份验证票中的isPersistent属性设置为持久类,则这个cookie的Expires属性一定要设置,这样这个cookie才会被做为持久cookie保存到客户端的cookie文件中.
3. 将身份验证票Cookie输出到客户端
通过Response.Cookies.Add(UserCookie) 将身份验证票Cookie附加到输出的cookie集合中,发送到客户端.
4. 重定向到用户申请的初试页面. 验证部分代码(这部分代码是在login.aspx页面上点击了登录按钮事件处理代码): private void Buttonlogin_Click(object sender, System.EventArgs e)
{
string user = TextBoxUser.Text; //读取用户名
string password = TextBoxPassword.Text; //读取密码
if(Confirm(user,password) == true) //confirm方法用来验证用户合法性的
{
string userRoles = UserToRole(user); //调用UserToRole方法来获取role字符串
FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket (1,user,DateTime.Now, DateTime.Now.AddMinutes(30), false,userRoles,"/") ; //建立身份验证票对象
string HashTicket = FormsAuthentication.Encrypt (Ticket) ; //加密序列化验证票为字符串
HttpCookie UserCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket) ;
//生成Cookie
Context.Response.Cookies.Add (UserCookie) ; //输出Cookie
Context.Response.Redirect (Context.Request["ReturnUrl"]) ; // 重定向到用户申请的初始页面
}
else
{
// 用户身份未被确认时的代码
}
}
//此方法用来验证用户合法性的
private bool Confirm(string user,string password)
{
//相应的代码
}
//此方法用来获得的用户对应的所有的role用逗号分割的一个字符串
private string UserToRole(string user)
{
//相应的代码
} 8,把配置写在web.config中9,name.SubString(0,1)10 制作一个用户控件(UserControl)的过程,和写ASPX页面一样,不过就是ASMX而已11 自定义控件,就是继承某个控件,修改重载它的方法符合自己的要求而已12 connect,command,dataset,datatable,ado.net对象多了查msdn去吧