進來看文章的各位先對你們說聲對不起了,我是帶著疑問來發(fā)表這篇文章的,標題可能說的還不夠明確,因為我也不知道該用什么詞語來形容。如果有更好的方法,請各個大大不吝賜教!
首先我想知道,在禁用ViewState的時候,只要存在<form id="form1" runat="server">的時候,就會存在ViewState,可是很多做的比較好的網(wǎng)站,首頁都沒有ViewState,就像我們的園子一樣,首頁連個ViewState的影子都看不到,是怎么實現(xiàn)的?
別和我說什么模板引擎,那完應(yīng)不是很清楚,也不了解,我問過我朋友,他說只要不用控件,就不會有ViewState產(chǎn)生,比如GridView,DataList等等,可是不用這些東東的話,又要像Asp和Jsp一樣,在頁面中寫亂七八糟的的代碼了,維護起來超難受,可是用了吧生成的|ViewState更難受,長的嚇人。。 我真不知道該怎么形容才好。
下面我就把代碼貼出來,大家看看有什么好方法可以解決這個頭疼的問題呢?
先來一個類,用于填充DataTable的
using System.Data;
namespace Test
{
public class DataSource
{
public static DataTable GetList()
{
DataTable result = new DataTable();
result.Columns.Add(new DataColumn("Text", typeof(string)));
result.Columns.Add(new DataColumn("Url", typeof(string)));
DataRow objDR = result.NewRow();
objDR["Text"] = "紅豆猥褻男童案下周將公布";
objDR["Url"] = "http://ent.163.com/11/0618/07/76QHOBR500034JAU.html";
result.Rows.Add(objDR);
/**/
objDR = result.NewRow();
objDR["Text"] = "希臘為推動新緊縮政策重組內(nèi)閣";
objDR["Url"] = "http://news.163.com/11/0618/02/76Q0OTS20001121M.html";
result.Rows.Add(objDR);
/**/
objDR = result.NewRow();
objDR["Text"] = "學校為騰宿舍讓大二學生提前畢業(yè)";
objDR["Url"] = "http://news.163.com/11/0618/10/76QV9OJ400014JB5.html";
result.Rows.Add(objDR);
/**/
objDR = result.NewRow();
objDR["Text"] = "北京有望年內(nèi)放松對高端項目的限購";
objDR["Url"] = "http://money.163.com/11/0617/19/76P92P0Q00253B0H.html";
result.Rows.Add(objDR);
/**/
objDR = result.NewRow();
objDR["Text"] = "中國制造的山寨電子產(chǎn)品在中東蔓延";
objDR["Url"] = "http://discover.news.163.com/11/0618/11/76R0TT79000125LI.html";
result.Rows.Add(objDR);
return result;
}
}
}
先來一個有ViewState的代碼:aspx頁
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ExistsViewstate.aspx.cs"
Inherits="Test.ExistsViewstate" EnableViewState="false" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:DataList ID="DataList1" runat="server">
<HeaderTemplate>
<ul>
</HeaderTemplate>
<ItemTemplate>
<li><a href='<%# Eval("Url")%>' target="_blank">
<%# Eval("Text") %>> </a></li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:DataList>
</form>
</body>
</html>
后臺代碼:cs文件
using System;
namespace Test
{
public partial class ExistsViewstate : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this.DataList1.DataSource = DataSource.GetList();
this.DataList1.DataBind();
}
}
}
}
沒有ViewState的代碼:aspx頁 需要導入兩個命名空間; 這種寫法的CS文件里沒有任何多余的代碼!
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="NoExistsViewstate.aspx.cs"
Inherits="Test.NoExistsViewstate" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="Test" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<ul>
<%
foreach (DataRow objDR in DataSource.GetList().Rows)
{
Response.Write(String.Format("<li><a href='{0}' target='_blank'>{1}</a></li>", objDR["Url"].ToString(), objDR["Text"].ToString()));
}
%>
</ul>
</body>
</html>
小弟在此膜拜~ 求更好的寫法,如果非得是用什么模板引擎,請?zhí)峁┮粋€案例,和“開源”易懂的,在此謝過……