• 控制項學習二(保留Postback之後的值)


     

    三.保留Postback之後的值

    HTML不會保留控制項的值

    1.       利用什麽機制保留?Session?還是ViewState

    當我們使用ViewState保存Text的值,當再次輸入內容,點Button后,TextBox的值是以前ViewSate而不是剛才輸入的值???

        Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)

            Dim renderData As String

            renderData = "<input name='" & Me.ClientID & "' type=TextBox value='" & Me.Text & "'>"

            output.Write(renderData)

        End Sub

        Private Sub MyTextBox_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load

            If Me.Page.IsPostBack = True Then Me.Text = Me.Page.Request.Form(Me.ClientID)

        End Sub

    End Class

    注意,上面黑體字。這段程式碼使得控制項在postback的時候,透過request.from機制,取得表單山TextBox中的值,並且寫入屬性Text中,如此一來,徹底解決了所有的問題。

    無法保留ViewState中的資訊

    有時我們把物件保存到ViewState中,需要序列化。例如:

        <Bindable(True), Category("Appearance"), DefaultValue("")> Property conn() As SqlClient.SqlConnection

            Get

                Return Me.ViewState("conn") '回傳屬性

            End Get

            Set(ByVal Value As SqlClient.SqlConnection)

                Me.ViewState ("conn") = Value    '設定屬性

            End Set

        End Property

    上面,檔程式執行到Me.ViewState ("conn") = Value會報錯。

    我們可以使用Session解決這一問題。

        <Bindable(True), Category("Appearance"), DefaultValue("")> Property conn() As SqlClient.SqlConnection

            Get

                Return Me.Page.Session(Me.UniqueID & "_conn") '回傳屬性

            End Get

            Set(ByVal Value As SqlClient.SqlConnection)

                Me.Page.Session(Me.UniqueID & "_conn") = Value    '設定屬性

            End Set

        End Property


     

    有沒有發現使用Session和使用ViewState存儲物件的時候,程式寫法有點不同,我們比較一下:

    Me.Page.Session(Me.UniqueID & "_conn") = Value ß這是使用 Session

    Me.ViewState ("conn") = Value ß這是 ViewState

    差別在,使用ViewState的時候,沒有加上Page,而是直接使用,上面的“Me”關鍵字,應為寫在控制項Class裡面,所以代表是控制項的本身,因此,Me.ViewState表示的是“控制項自己的Viewstate”,而Me.Page.Session則是,“控制所屬網頁的Session物件”。

    因此,ViewState不會有同名稱的問題,因為即使在一張網頁上,有多個該控制項的instance,每一個instance都有各自的ViewState,但是,由於Sessin物件是共用的,所以會有名稱重複的問題,因此,我們在Session物件的使用上,特別用[me.UniqueID&_conn]這個名稱取代【conn】,以避免當網頁上同時有多個該控制項的instance衝突,導致不同的控制項存取到同樣的Session變數,使得不同的控制項instance,屬性值變成一樣。

  • 相关阅读:
    第二次:Ubuntu16.04 安装Docker
    第一次:从今开始玩Linux,Ubuntu16.04
    学习日常
    Vector和ArrayList的异同、Hashtable和HashMap的异同
    如何吃透Python的面向对象(OOP)
    Python基础(下篇)
    Python基础(中篇)
    Python基础(上篇)
    Pycharm安装
    Python的安装与配置
  • 原文地址:https://www.cnblogs.com/htht66/p/1334159.html
Copyright © 2020-2023  润新知