asp.net web forms - 維持 viewstate
通過在您的 web form 中維持對(duì)象的 viewstate(視圖狀態(tài)),您可以省去大量的編碼工作。
維持 viewstate(視圖狀態(tài))
在經(jīng)典 asp 中,當(dāng)一個(gè)表單被提交時(shí),所有的表單值都會(huì)被清空。假設(shè)您提交了一個(gè)帶有大量信息的表單,而服務(wù)器返回了一個(gè)錯(cuò)誤。您不得不回到表單改正信息。您點(diǎn)擊返回按鈕,然后發(fā)生了什么......所有表單值都被清空了,您不得不重新開始所有的一切!站點(diǎn)沒有維持您的 viewstate。
在 asp .net 中,當(dāng)一個(gè)表單被提交時(shí),表單會(huì)連同表單值一起出現(xiàn)在瀏覽器窗口中。如何做到的呢?這是因?yàn)?asp .net 維持了您的 viewstate。 viewstate 會(huì)在頁面被提交到服務(wù)器時(shí)表明它的狀態(tài)。這個(gè)狀態(tài)是通過在帶有 <form runat="server"> 控件的每個(gè)頁面上放置一個(gè)隱藏域定義的。源代碼如下所示:
<input type="hidden" name="__viewstate"
value="ddwtnti0odu5mde1ozs+zbcf2ryjmpevgury2etj79hnl4q=" />
.....some code
</form>
維持 viewstate 是 asp.net web forms 的默認(rèn)設(shè)置。如果您想不維持 viewstate,請(qǐng)?jiān)?.aspx 頁面頂部包含指令 <%@ page enableviewstate="false" %> ,或者向任意控件添加屬性 enableviewstate="false" 。
請(qǐng)看下面的 .aspx 文件。它演示了"老"的運(yùn)行方式。當(dāng)您點(diǎn)擊提交按鈕,表單值將會(huì)消失:
實(shí)例
<body>
<form action="demo_classicasp.aspx" method="post">
your name: <input type="text" name="fname" size="20">
<input type="submit" value="submit">
</form>
<%
dim fname
fname=request.form("fname")
if fname<>"" then
response.write("hello " & fname & "!")
end if
%>
</body>
</html>
下面是新的 asp .net 方式。當(dāng)您點(diǎn)擊提交按鈕,表單值不會(huì)消失:
實(shí)例
點(diǎn)擊實(shí)例的右邊框架中的查看源代碼,您將看到 asp .net 已經(jīng)在表單中添加了一個(gè)隱藏域來維持 viewstate。
sub submit(sender as object, e as eventargs)
lbl1.text="hello " & txt1.text & "!"
end sub
</script>
<html>
<body>
<form runat="server">
your name: <asp:textbox id="txt1" runat="server" />
<asp:button onclick="submit" text="submit" runat="server" />
<p><asp:label id="lbl1" runat="server" /></p>
</form>
</body>
</html>