国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET2.0 HiddenField控件

2024-07-10 13:11:39
字體:
供稿:網(wǎng)友

商業(yè)源碼熱門下載www.html.org.cn

 

  hiddenfield控件顧名思義就是隱藏輸入框的服務器控件,它能讓你保存那些不需要顯示在頁面上的且對安全性要求不高的數(shù)據(jù)。也許這個時候應該有這么一個疑問,為什么有了viewstate、session和cookie等狀態(tài)保存機制,還需要用起hiddenfield呢?
增加hiddenfield,其實是為了讓整個狀態(tài)管理機制的應用程度更加全面。因為不管是viewstate、cookie還是session,都有其失效的時候,比如用戶因某種需求要求設置viewstate為false,或者環(huán)境條件限制使用cookie,或者用戶長時間沒有動作導致session過期等等,那這個時候hiddenfield無疑是最佳選擇。
 
    hiddenfield控件的作用簡單的說是用于存儲需要在向服務器的發(fā)送間保持的值。它作為 <input type= "hidden"/> 元素呈現(xiàn),并且通過添加runat=”server”就可以使它成為標準的html服務器控件。下面列出的是asp.net hiddenfield web服務器控件可以使用的屬性和事件。
<asp:hiddenfield
    enabletheming="true|false"
    enableviewstate="true|false"
    id="string"
    ondatabinding="databinding event handler"
    ondisposed="disposed event handler"
    oninit="init event handler"
    onload="load event handler"
    onprerender="prerender event handler"
    onunload="unload event handler"
    onvaluechanged="valuechanged event handler"
    runat="server"
    skinid="string"
    value="string"
    visible="true|false"
/>

    因為 hiddenfield 的值將呈現(xiàn)給客戶端瀏覽器,所以它不適用于存儲安全敏感的值。若要為 hiddenfield 控件指定值,請使用 value 屬性,請注意是value而不是text。事實上hiddenfield并沒有text屬性,這和dropdownlist、checkboxlist等標準按鈕的屬性命名方式一致。在標準的屬性命名方式中,text的值是呈現(xiàn)給用戶看到的,而value的值則是通長是通過代碼進行控制的。例如你可以讓dropdownlist的text屬性顯示用戶名而讓它的value存儲用戶的編號。
 下面的代碼顯示的是改控件的基本使用。
<html>
<head>
    <script language="c#" runat="server">
       void button1_click(object sender, eventargs e)
       {
            if (hiddenfield1.value == string.empty)
               hiddenfield1.value = "0";
           
      hiddenfield1.value = (convert.toint32(hiddenfield1.value)+1).tostring();
           label1.text = hiddenfield1.value;
       }
    </script>
</head>
<body>
    <h3><font face="verdana">hiddenfield</font></h3>
    <form runat=server>
        <asp:hiddenfield id=hiddenfield1 runat=server />
  <asp:button id=button1 text="單擊按鈕" runat="server" />
        單擊 <asp:label id=label1 text="0" runat=server /> 次
    </form>
  </body>
</html>
    
    在上面代碼中,  <asp:hiddenfield id=hiddenfield1 runat=server />就定義了一個隱藏控件在按鈕的單擊事件里計算用戶單擊的次數(shù),并將改次數(shù)賦值給label1。
 
    你可以將上面代碼中的  <asp:hiddenfield id=hiddenfield1 runat=server />改為<input type=hidden id=hiddenfield1 runat=server >也是可以的

在使用上面代碼里,如果你從瀏覽器里查看源代碼會得到如下的信息:
<form name="form1" method="post" action="default.aspx" id="form1">
    這是因為hiddenfield是通過http協(xié)議進行傳遞數(shù)據(jù)的,所以如果你通過" method="get"或者鏈接打開新的窗體頁,那么hiddenfield并不可用。
    另外,hiddenfield并不是取代session來維護狀態(tài)的,在上面例子里,雖然你點擊一次按鈕可以顯示你點擊的次數(shù)但是并不是說它可以記錄你的狀態(tài)信息。如果你重新打開瀏覽器那么你看到的此處仍然是0而不是3。

hiddenfield事件
  hiddenfield較為常用的是valuechanged事件,該事件在value值發(fā)生改變時觸發(fā)該事件。然而在實際使用時,要知道頁面記載順序。在頁面回傳過程中,具體的頁面周期你可以到如下網(wǎng)站查看
http://msdn2.microsoft.com/zh-cn/library/ms178472.aspx
   下面的例子說明了這個問題

<head>
<script runat="server" language="c#">
 protected void page_load(object sender, eventargs e)
    { response.write("<p>頁面的page_load事件觸發(fā),觸發(fā)時間是:" + datetime.now.tostring());
        if (hiddenfield1.value == string.empty)
            hiddenfield1.value = "0";    }

     protected void button1_click(object sender, eventargs e)

    {  response.write("<p>button1_click為改變hidden的值前事件觸發(fā),觸發(fā)時間是:" + datetime.now.tostring());
  hiddenfield1.value = (convert.toint32(hiddenfield1.value) + 1).tostring();
                 label1.text = hiddenfield1.value;

    }

     protected void hiddenfield1_valuechanged(object sender, eventargs e)

    {   response.write("<p>hiddenfield的 valuechanged事件觸發(fā),觸發(fā)時間是:" + datetime.now.tostring());   }

</script>
</head>

<body>

    <form id="form1" runat="server">

    <div> <asp:hiddenfield id="hiddenfield1" runat="server" onvaluechanged="hiddenfield1_valuechanged"  />

    </div>   <asp:label id="label1" runat="server" text="label"></asp:label>

        <br />   <asp:button id="button1" runat="server" onclick="button1_click" text="button" />

    </form></body>

</html>
    

在這個例子里,我們想要的結(jié)果是:當用戶單擊按鈕時,通過按鈕的button1_click事件更改hiddenfield1的value,然后再觸發(fā)hiddenfield1的hiddenfield1_valuechanged事件,然而事實真的如此嗎?
運行上面的代碼,得到的結(jié)果正如你看到的,每次單擊時,button確實改變了hiddenfield的值,但是我們在hiddenfield1_valuechanged里定義的輸出并沒有執(zhí)行,換句話說頁面并沒有執(zhí)行valuechanged事件
要理解這個問題還需要了解頁面的聲明周期,在頁面周期過程中,你可以看到在page_init里是讀取或初始化控件屬性,然后再是control events。
這里的事件意思是說: 在page_init事件里,web頁面會接受用戶回傳的數(shù)據(jù),例如將 <span id="label1">label</span>賦值給id為label1的text屬性,將  <input type="hidden" name="hiddenfield1" id="hiddenfield1" value="0" />的value值賦值給hiddenfield1的value屬性。等所有初始化完畢了,頁面才開始執(zhí)行控件的事件--button1_click,在button事件里將hiddenfield的value值改變。那么這里既然已經(jīng)將value值改變?yōu)槭裁礇]有執(zhí)行valuechanged事件呢?

此時,雖然這里已經(jīng)將value值改變,但是在page_init里保存的這是因為當前單擊button按鈕時,雖然改變了hiddenfield但同樣又一次觸發(fā)了頁面的回復,也就是雖然在上一此hiddenvalue的值為0,而此次將其值改為1,但是在頁面回傳后,由于viewstate會保存上次的裝(這里是1),所以在page_init里,認為hiddenfield的初始值為1,而本次還是1,使得它感覺數(shù)據(jù)沒有變化,所以仍然不會觸發(fā)valuechanged事件

當然,你可以禁用hiddenfield來進行處理,就可以執(zhí)行valuechanged事件,但是事實上你禁用viewstate后,頁面不再保存viewstate的值使得頁面認為每一次請求hiddenfield的都是新的,例如如下代碼:
你并沒有改變hiddenfield的值,但是仍然每次都執(zhí)行。

<%@ page enableviewstate="false"   %>
<head>
<script runat="server" language="c#">

    protected void page_load(object sender, eventargs e)

    {

        if (hiddenfield1.value == string.empty)

            hiddenfield1.value = "111";

    }

 

    protected void button1_click(object sender, eventargs e)

    { //  hiddenfield1.value = (convert.toint32(hiddenfield1.value) + 1).tostring();     
  label1.text = textbox1.text;    }

     protected void hiddenfield1_valuechanged(object sender, eventargs e)

    {   response.write("changed." + datetime.now.tostring());
        response.write(hiddenfield1.value);
        response.write(textbox1.text);    }

</script>
</head>
<body>

    <form id="form1" runat="server">   <div>

        <asp:hiddenfield id="hiddenfield1" runat="server" onvaluechanged="hiddenfield1_valuechanged"  />

    </div>

        <asp:label id="label1" runat="server" text="label"></asp:label>

        <br />
        <asp:textbox runat=server id=textbox1></asp:textbox>

        <asp:button id="button1" runat="server" onclick="button1_click" text="button" />

    </form>

</body>

</html>


利用hiddenfile 并結(jié)合asp.net2.0提供的“交叉cross page”頁面可以實現(xiàn)頁面數(shù)據(jù)的傳遞,該情況針對這樣的一種方案:
在一個注冊頁面里,需要用戶輸入數(shù)據(jù),由于備注一欄的數(shù)據(jù)可能很多,可以在新窗口可以利用類似freetextbox的控件讓用戶
格式化文本,并在輸入完畢后,返回原注冊頁面。關(guān)于這種情況,以后會介紹

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 杭锦后旗| 江北区| 吕梁市| 广宁县| 耿马| 三河市| 贞丰县| 开化县| 宝应县| 绥江县| 辽宁省| 四平市| 正阳县| 格尔木市| 昌宁县| 韶关市| 丹巴县| 饶平县| 磴口县| 红安县| 金华市| 高邮市| 修文县| 襄樊市| 尖扎县| 阳信县| 吉林省| 湘阴县| 水富县| 岫岩| 额尔古纳市| 深州市| 新密市| 海口市| 商南县| 合阳县| 平度市| 仙居县| 庐江县| 卢湾区| 竹山县|