记录ASP.NET编程技巧,持续更新:
(1)可以用递归的方法一次性删除页面上的文本框的值,不管这个文本框在多少级容器中. private void ClearText(ControlCollection Controls) { foreach (Control item in Controls) { if (item.Controls.Count > 0) { ClearText(item.Controls); } if (item is TextBox) { ((TextBox)item).Text = ""; } } }
(2)在asp.net中利用页面基类实现身份验证
基类代码如下:
/// <summary>
/// AdminPage是后台所有需要身份验证的页的基类
/// </summary>
public class AdminPage:System.Web.UI.Page
{
public AdminPage()
{
//处理加载事件
this.Load += new EventHandler(AdminPage_Load);
}
void AdminPage_Load(object sender, EventArgs e)
{
//假设用户登录成功之后会设置一个名为“UserInfo”的Session
//假设用户登录页面login.aspx位于网站根目录下的Admin文件下
if (Session["UserInfo"] == null)
{
//使用~来保证无论在什么目录层次进行身份验证都能跳转到后台登录页面
Response.Redirect("~/Admin/Login.aspx");
}
}
}
这样,对于后台任何需要进行身份验证的页面,只需将它更改为继承自AdminPage类即可,这样这些类中就不需要编写任何身份验证的代码了。却已经能实现验证了,因为它继承自AdminPage类。
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class Admin_News_Index : AdminPage
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
(3)GridView显示行的序号:
<asp:GridView ID="GridView1" runat="server">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<%#Container.DataItemIndex+1 %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
(4)GridView排序
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
ViewState["SortOrder"] = "StudentID"; //排序字段名称
ViewState["OrderDire"] = "ASC";
BindData();
}
}
public void BindData() //数据绑定代码
{
DataSet ds = new DataSet();
StringBuilder strWhere = new StringBuilder();
if (txtKeyword.Text.Trim() != "")
{
#warning 代码生成警告:请修改 keywordField 为需要匹配查询的真实字段名称
strWhere.AppendFormat("StudentID like '%{0}%'", txtKeyword.Text.Trim());
}
ds = bll.GetList(strWhere.ToString());
DataView view = ds.Tables[0].DefaultView;
string sort = (string)ViewState["SortOrder"] + " " + (string)ViewState["OrderDire"]; //注意这行
view.Sort = sort;
gridView.DataSource = view;
gridView.DataBind();
}
//编写Sorting事件代码
protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
{
string sPage = e.SortExpression;
if (ViewState["SortOrder"].ToString() == sPage)
{
if (ViewState["OrderDire"].ToString() == "Desc")
ViewState["OrderDire"] = "ASC";
else
ViewState["OrderDire"] = "Desc";
}
else
{
ViewState["SortOrder"] = e.SortExpression;
}
BindData();
}
(5)将QQ状态发布在页面上,其他人点击后可以进行联系
可以登录腾讯网站http://wp.qq.com/index.html,获得代码:
<a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=123456&site=qq&menu=yes"><img border="0" src="http://wpa.qq.com/pa?p=2:123456:41" alt="点击这里给我发消息" title="点击这里给我发消息"></a>
只要把红色部分换成你的QQ号码,然后粘贴到页面上,就可实现该功能。
(6)指定Form的action
在asp.net中runat="server"的Form,其action只能指向自己。
服务器在解释.aspx页面的时候,会自动把runat="server"的Form的action指定为自身,而不管这个Form是否已经指定了action。
也就是说,只有一般的Form才能提交到别的页面,而这种HTML的Form是不能包含任何服务器端控件的,这样一来,所有的结构就像ASP一样了。
在某些特殊情况下,如果要指定Form的action,则不能用runat="server"的Form,只能用普通的Form,如:
<form id="form1" action="test.aspx" method=post>
<div>
<input type=text ID="TextBox1" name="TextBox1"></input>
<input id="Submit1" type="submit" value="submit" /></div>
</form>
获取提交数据的test.aspx代码如下:
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(Request.Form["TextBox1"]);
//Response.Write(Request.Params["TextBox1"]);
}