日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
flutter精美,Flutter精美網(wǎng)站

為什么除了Flutter之外,我們還需要另一個跨平臺開發(fā)框架?

不久前,谷歌正式推出 Jetpack Compose 1.0 版本。近日,JetBrains 在此基礎(chǔ)上發(fā)布了 Compose Multiplatform Alpha 版本,旨在將 Compose 擴展到桌面和 Web 端。

公司主營業(yè)務(wù):成都網(wǎng)站制作、網(wǎng)站建設(shè)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出崇陽免費做網(wǎng)站回饋大家。

Compose Multiplatform 由 Compose for Desktop 和 Compose for Web 組成,通過 Kotlin Multiplatform 支持許多不同的平臺。其中,Compose Desktop 采用 Google 的 Skia 圖形庫,來實現(xiàn)在 Windows、macOS 和 Linux 上的 UI 繪制,借此在所有支持的操作系統(tǒng)中提供統(tǒng)一的體驗,類似于 Flutter 的做法。

根據(jù) Kotlin 團隊的說法,相比起 Electron 框架,Compose Multiplatform 在內(nèi)存消耗、安裝大小和 UI 渲染性能等方面將有更明顯的優(yōu)勢。隨著 Alpha 版本的發(fā)布,Compose Multiplatform 還收獲了新的 Android Studio 插件,包括對在 IDE 中顯示組件預(yù)覽的支持以及許多附加功能。

我們希望通過本文幫助大家進一步了解 Compose 的跨平臺能力,以及 JetBrains 將 Compose 從 Android 擴展到這些其他平臺背后的主要驅(qū)動力是什么。

基于 Jetpack Compose 1.0

由谷歌打造的 Jetpack Compose 是一款用于在 Android 應(yīng)用程序之內(nèi)構(gòu)建用戶界面的官方框架,上周剛剛發(fā)布 1.0 版本。與此同時,Android Studio 代號“極狐”的首個穩(wěn)定版 2020.3.1 也正式亮相。

盡管才剛迎來 1.0,但谷歌表示“目前 Play Store 中已經(jīng)有超過 2000 款應(yīng)用程序在使用 Compose——更重要的是,就連 Play Store 這款應(yīng)用本身也在使用 Compose?!惫雀璺矫孢€表示,“我們一直在與一些頂級應(yīng)用的開發(fā)人員進行合作,他們的反饋和支持幫助我們使 1.0 版本更加強大?!?/p>

Jetpack Compose for Android 迎來 1.0 版本

Compose 基于 Kotlin 開發(fā),而 Kotlin 與 Android Studio(即官方指定的 Android IDE)均來自開發(fā)工具廠商 JetBrains。雖然 Jetpack Compose 專為 Android 打造(與谷歌的 Flutter 框架不同), 但 JetBrains 公司堅信 Compose 完全能夠獲得跨平臺能力 。

Compose for Desktop: 這只是開始

Compose Multiplatform 可以說是該框架面向 MacOS、Linux、Windows 以及 Web 開設(shè)的一個端口,目前剛剛發(fā)布 1.0 Alpha 版本。雖然尚處于早期開發(fā)階段,但 JetBrains 表示,其已經(jīng)“為開發(fā)人員帶來能夠基本安全使用的穩(wěn)定 API”。

TheRegister 就此事詢問了 JetBrains 公司 Compose 項目負責(zé)人 Nikolay Igotti,希望了解為什么該公司在擁有了已經(jīng)廣泛應(yīng)用于 IntelliJ IDEA IDE 及多種豐富變體的桌面應(yīng)用程序跨平臺 Java 框架之外,還要費力開發(fā) Compose for Desktop。Igotti 的回答是,“舊有 Java 框架基本上就是修改版的 Swing。Swing 屬于默認 JDK UI 框架,Swing 和 AWT(Abstract Windows Toolkit,抽象窗口工具包)。Compose 則完全是另一碼事,當然我們也在設(shè)計中考慮到了互操作性需求……Swing 這套框架太陳舊了,最早出現(xiàn)在上世紀九十年代末。多年來人們對于 UI 的設(shè)計思路已經(jīng)天翻地覆,Swing 顯然滿足不了要求了?!?/p>

JetBrains IDE 中的 Compose for Desktop 項目

Compose 與 Swing 有一個比較大的共同點:與其他使用本機控件的跨平臺框架,比如例如 Java 的 SWT(Standard Widget Toolkit)以及微軟的 Xamarin 有所不同,它們選擇自主繪制控件。Compose 使用的 Skia 開源圖形庫,也在谷歌 Chrome、Flutter 及其他眾多框架當中得到廣泛應(yīng)用。那這是否意味著 Compose 應(yīng)用程序?qū)]有自己的原生外觀?對此,Igotti 的回應(yīng)是,“這取決于開發(fā)人員的選擇,取決于他們?nèi)绾螢閼?yīng)用程序設(shè)置主題。在這方面,Compose 的情況與 Flutter 等其他框架沒什么區(qū)別。”

那 Compose for Desktop 應(yīng)用程序是否依賴于 JVM(Java Virtual Machine)運行?Igotti 表示,“我們也知道,JVM 應(yīng)用程序的發(fā)布情況可能比較棘手。因此我們提供自己的 Gradle 插件,其使用 jpackage 與 Jlink 以 JVM 應(yīng)用程序為基礎(chǔ)制作原生應(yīng)用程序。Mac 的.dmg、Windows 的 MSI、Linux 的 deb 包等均可實現(xiàn),大家用不著擔心 JVM?!?/p>

也就是說,開發(fā)成果將會是一款被精心包裹起來的 JVM 應(yīng)用程序。JetBrains 還有一款用于解決這個問題的 Kotlin/Native 編譯器,“預(yù)計將在未來發(fā)布,或者專門用于桌面開發(fā)?!?/p>

對應(yīng)用程序的另一種思考方式

那 Web 應(yīng)用程序方面呢?Igotti 回應(yīng)稱,“我們使用 Kotlin/JS 編譯器?!盋ompose 的 Web 版本不如桌面版先進,說明文檔中也警告稱“API 尚未最終確定,預(yù)計會發(fā)生重大變化。”此外,雖然 Web 版本確實使用 Compose 模型,但 API 卻完全不同,而且會使用 HTML 與 CSS。所以,Web 版與 Compose for Desktop 之間能夠共享的代碼應(yīng)該比較少。

據(jù) Igotti 介紹,“Compose 代表著一種不同的應(yīng)用程序思考方式。狀態(tài)即 UI 的真實來源,而 UI 本身是無狀態(tài)的,其表達永遠由狀態(tài)計算得出。在這方面,Compose for Web 采用一組相同的原語,完全相同的狀態(tài)管理思路。但是對于具體的小部件集合與排列方式,Web 版與桌面版之間確實無法互通?!?/p>

說到這里,為什么要把 Compose for Android 擴展到多種其他平臺之上?“Compose 的目標受眾主要分為三類。首先是使用 Kotlin 與 Compose 的 Android 開發(fā)人員,他們希望把自己的開發(fā)成果交付至其他平臺;其二是純 Kotlin 開發(fā)人員,他們希望以‘一次編寫、隨處運行’的方式開發(fā)新的應(yīng)用程序;第三則是那些不太熟悉 Kotlin 或者 Compose,但又希望開發(fā)出精美 UI 的用戶,我們希望能為他們提供實現(xiàn)目標的工具?!?/p>

Igotti 并沒有給出具體的發(fā)布日期,但表示自己希望 Beta 版能在今年秋天發(fā)布,“我們也希望能在今年之內(nèi)推出 1.0 版本?!表椖勘旧硎峭耆_源的,“二十一世紀了,框架在大多數(shù)人們心目中就不應(yīng)該收費。我們只是想開發(fā)一款長期缺失的軟件”,補足 JetBrains 當前商業(yè)模式中的工具鏈。

那么,JetBrains 會在自己的其他工具中使用 Compose 嗎?事實上,他們的 JetBrains Toolbox(用于管理已安裝的 IDE)已經(jīng)在使用 Compose,但 Igotti 表示短時間內(nèi) Compose 還無法取代 IntelliJ IDEA 等現(xiàn)有框架。“編輯器是其中最復(fù)雜也最重要的組件,經(jīng)歷了 20 年的發(fā)展演進,我們幾乎不可能在中途進行重寫了。無論是 JetBrains 還是我個人,都不打算強迫每個人都轉(zhuǎn)而使用 Compose。我們的目標是為原有框架選項滿足不了的用戶提供新的解決方案?!?/p>

寫在最后

那么,為什么除了 Flutter 之外,我們還需要另一個跨平臺框架?雖然谷歌的 Flutter 最開始主要面向移動設(shè)備,但現(xiàn)在也開始向桌面及 iOS 進軍,甚至比 Compose 還搶先了一步。不過,根據(jù) StackOverflow 的最新調(diào)查, Flutter 使用的語言為 Dart;盡管 Dart 語言的人氣正在增長(正是受到 Flutter 的推動),但仍然無法與 Kotlin 相提并論。

Compose 代表著一種獨特的 UI 構(gòu)建方法,也許最期待 Compose 跨平臺功能的受眾,正是那些曾在 Android 上使用過它、又特別喜歡這種 UI 構(gòu)建體驗的開發(fā)者。

想要進一步了解 Compose,國內(nèi) Android 開發(fā)者可訪問以下鏈接查看中文手冊:

延伸閱讀:

asp.net頁面怎樣一次傳兩個值

樓上正解,首先是要接收的頁面地址,然后用問號“?”后連接要傳的參數(shù)和值,然后多個參數(shù)用“”符連接,然后接受的時候,在接收頁面用Request.QueryString["參數(shù)"]或者Request["參數(shù)"]的方法獲得值

flutter為什么不推薦getx

使用這個版本的GetX寫了Demo之后,發(fā)現(xiàn)有幾個問題:

感覺不太像是穩(wěn)定版本,存在一些比較明顯的問題;而且2.0.6到2.0.7只是一個小版本,全局狀態(tài)管理邏輯似乎就有比較大的改動。

不支持響應(yīng)式編程,這個版本的狀態(tài)管理還是基于state的邏輯;因為想要比較高效的解耦頁面和邏輯,可能需要搭配響應(yīng)式編程框架。

相關(guān)功能可能比較少,沒有最新版本的功能那么全面。

Flutter是Google開源的構(gòu)建用戶界面(UI)工具包,幫助開發(fā)者通過一套代碼庫高效構(gòu)建多平臺精美應(yīng)用,支持移動、Web、桌面和嵌入式平臺。

Flutter 開源、免費,擁有寬松的開源協(xié)議,適合商業(yè)項目。Flutter已推出穩(wěn)定的2.0版本。

產(chǎn)生背景:

Flutter可以方便的加入現(xiàn)有的工程中。在全世界,F(xiàn)lutter 正在被越來越多的開發(fā)者和組織使用,并且 Flutter是完全免費、開源的。它也是構(gòu)建未來的 Google Fuchsia 應(yīng)用的主要方式。

Flutter組件采用現(xiàn)代響應(yīng)式框架構(gòu)建,這是從React中獲得的靈感,中心思想是用組件(widget)構(gòu)建你的UI。

組件描述了在給定其當前配置和狀態(tài)時他們顯示的樣子。當組件狀態(tài)改變,組件會重構(gòu)它的描述(description),F(xiàn)lutter 會對比之前的描述, 以確定底層渲染樹從當前狀態(tài)轉(zhuǎn)換到下一個狀態(tài)所需要的最小更改。

如何在頁面之間傳遞變量

(1)Session

(2)Cookie

(3)Application

(4)URL地址中的參數(shù)

(5)通過隱藏字段來傳遞數(shù)據(jù)

(6)Server.Transfer

(7)通過序列化對象

(8)........

下面就分別一一介紹:

(1)使用Session

session對象是用來記錄瀏覽器端的變量,是個別瀏覽器端專用的變量,對于每一個瀏覽器訪問時都會自動產(chǎn)生一個seseion對象,該對象提供一個存儲場所,用來存儲僅僅對該訪問者在會話的活動期間打開的網(wǎng)頁可用的變量和對象。這樣就用可以用來在Web間傳遞專對單個瀏覽器端使用的數(shù)據(jù)。其定義方法:session(“變量名”)=數(shù)值

如:Session["testTransmitVaraint"] = "testSession";

session對象所定義的變量只是瀏覽器端的專用變量,所以適用于局部會話間的網(wǎng)頁數(shù)據(jù)傳遞。

(2)使用Cookie

cookie是在瀏覽頁面時Web服務(wù)器在瀏覽器端所寫入的一些小文件,cookie是存放在瀏覽器端本機磁盤上,而不是存放在服務(wù)端的??梢栽诎l(fā)送數(shù)據(jù)時寫入cookie,接收時讀取cookie完成數(shù)據(jù)在Web頁面間的傳送。

發(fā)送頁面

HttpCookie cookie = new HttpCookie("testCookie");

cookie.Value = TextBox1.Text;

Response.SetCookie(cookie);

取Cookie頁

HttpCookie cookie = Request.Cookies["testCookie"];

Response.Write("brHttpCookie = " + cookie.Value);

(3)使用Application

application對象是用來記錄整個網(wǎng)站信息的,是記錄不同瀏覽器端共享的變量,無論有幾個瀏覽者同時存取網(wǎng)頁,都只會產(chǎn)生一個application對象實例。用戶可以通過定義application整站共享變量來實現(xiàn)網(wǎng)頁間的數(shù)據(jù)傳遞。其定義方法是:application(“變量名”)=數(shù)值

如:Application["testApplication"] = "testApplication";

application對象所定義的變量對于所有瀏覽端都是可見的,所以其使用場合是所有瀏覽端共享的全局數(shù)據(jù)傳遞。?

(4)使用URL地址中的參數(shù)

URL方式是實現(xiàn)Web間數(shù)據(jù)傳遞最基本的方法,操作簡單,可很方便地實現(xiàn)不同Web頁面間的數(shù)據(jù)傳遞,但其安全性比較差。將要傳遞的數(shù)據(jù)附加在網(wǎng)頁地址(URL)后面進行傳遞。如:,其中?后面所跟著的字符串便是傳遞的數(shù)據(jù),=前的是變量名,=后面是數(shù)值,可以使用request對象來獲取傳遞的數(shù)據(jù)。如:request(“username”)。這種方法在傳遞數(shù)據(jù)過程中其數(shù)據(jù)內(nèi)容在URL欄中是顯示的,用戶能看到提交的內(nèi)容。?

以上四種方法的適用范圍:簡單變量如基本的數(shù)據(jù)類型的數(shù)據(jù)

(5)使用隱藏字段來傳遞數(shù)據(jù)

通過在網(wǎng)頁上制作表單交互區(qū)域,用戶在瀏覽器端輸入數(shù)據(jù),然后通過form提交到服務(wù)器,在提交后的接受form數(shù)據(jù)的頁面里就可以接收到相應(yīng)數(shù)據(jù),即form的action頁面中可以使用request對象來接收所傳遞的數(shù)據(jù)。

如:

發(fā)送頁面:

body?MS_POSITIONING="GridLayout"

form?id="Form1"?method="post"?runat="server"

table?border="0"?align="center"?width="100%"

tr

td?align="center"input?type="hidden"?name="UserID"?value="測試隱藏字段"/td

/tr

tr

td?align="center"

asp:Button?id="Button1"?runat="server"?Text="ServerButton?Goto?Page"/asp:Button/td

/tr

tr

td?align="center"/td

/tr

/table

/form

/body

然后在cs文件中添加下面的代碼:

private?void?Button1_Click(object?sender,?System.EventArgs?e)

{

Server.Transfer("RequestHidden.aspx");

}

接收頁面:request(“UserID”)

利用form頁面的文本框來接收用戶數(shù)據(jù)的輸入,通過submit按鈕提交后在targetweb頁面中使用request來接收數(shù)據(jù)。?

適用范圍:基本的數(shù)據(jù)類型的數(shù)據(jù),不宜傳遞對象變量等復(fù)雜的數(shù)據(jù)

(6)使用Server.Transfer

這個方法稍微復(fù)雜一點,但在頁面間值傳遞中卻是特別有用的,使用該方法你可以在另一個頁面以對象屬性的方式來存取顯露的值,當然了,使用這種方法,你需要額外寫一些代碼以創(chuàng)建一些屬性以便可以在另一個頁面訪問它,但是,這個方式帶來的好處也是顯而易見的??傮w來說,使用這種方法是簡潔的同時又是面向?qū)ο蟮摹?/p>

使用這種方法的整個過程如下:

1,在頁面里添加必要的控件

2,創(chuàng)建返回值的Get屬性過程

3,創(chuàng)建可以返回表單的按鈕和鏈接按鈕

4,在按鈕單擊事件處理程序中調(diào)用Server.Transfer方法轉(zhuǎn)移到指定的頁面

5,在第二個頁面中,我們就可以使用Context.Handler屬性來獲得前一個頁面實例對象的引用,通過它,就可以使用存取前一個頁面的控件的值了

此方法的適用范圍:簡單變量如基本的數(shù)據(jù)類型的數(shù)據(jù),復(fù)雜變量如結(jié)構(gòu)、類變量、DataSet、DataTable等

具體的事例,請見原代碼。??

此方法的適用范圍:簡單變量如基本的數(shù)據(jù)類型的數(shù)據(jù),復(fù)雜變量如結(jié)構(gòu)、類變量、DataSet、DataTable等

(7)通過序列化對象

序列化是指將對象實例的狀態(tài)存儲到存儲媒體的過程。在此過程中,先將對象的公共字段和私有字段以及類的名稱(包括類所在的程序集)轉(zhuǎn)換為字節(jié)流,然后再把字節(jié)流寫入數(shù)據(jù)流。在隨后對對象進行反序列化時,將創(chuàng)建出與原對象完全相同的副本。

在面向?qū)ο蟮沫h(huán)境中實現(xiàn)序列化機制時,必須在易用性和靈活性之間進行一些權(quán)衡。只要您對此過程有足夠的控制能力,就可以使該過程在很大程度上自動進行。例如,簡單的二進制序列化不能滿足需要,或者,由于特定原因需要確定類中那些字段需要序列化。

為什么要使用序列化?最重要的兩個原因是:將對象的狀態(tài)保存在存儲媒體中以便可以在以后重新創(chuàng)建出完全相同的副本;按值將對象從一個應(yīng)用程序域發(fā)送至另一個應(yīng)用程序域。例如,序列化可用于在ASP.NET 中保存會話狀態(tài),以及將對象復(fù)制到 Windows 窗體的剪貼板中。它還可用于按值將對象從一個應(yīng)用程序域遠程傳遞至另一個應(yīng)用程序域。

關(guān)于序列化對象更詳細的介紹,請參見微軟的“.NET 中的對象序列化”?

(8)結(jié)束語

上述介紹的是網(wǎng)頁間數(shù)據(jù)傳遞的常用方法,各有千秋。其中URL方式和form方式實現(xiàn)方法簡單,可實現(xiàn)網(wǎng)頁間的簡單數(shù)據(jù)傳遞,一般為字符串類型,其特點是安全性差,而且必須是連續(xù)訪問兩頁面間數(shù)據(jù)傳遞。Cookie只能存放string類型的數(shù)據(jù),如果想要存放更為復(fù)雜的數(shù)據(jù)類型,那么必須先將其轉(zhuǎn)換為string類型。Application對象和Session對象操作相對復(fù)雜些,瀏覽量非常大的網(wǎng)頁使用時應(yīng)適量,而且使用結(jié)束后盡量清除,否則大量使用有可能會導(dǎo)致服務(wù)器的癱瘓。Session變量的安全性較高,可傳遞專用瀏覽端數(shù)據(jù)。具體應(yīng)用決定了數(shù)據(jù)傳遞方式的選擇,合理數(shù)據(jù)傳遞方式選擇是Web頁面的設(shè)計中的關(guān)鍵考慮因素。

編寫一個非常精美的Flutter Todo-List項目

花費大概一個多月的時間,這個完全由Flutter編寫的Todo-List項目總算初步完成了!現(xiàn)在,它終于要被開源出來了。

在開始介紹之前,先來簡單的看一下真機運行效果吧

下面,針對使用者和開發(fā)者,我將來分別介紹一次

app中,可以在主題切換界面選擇各種主題顏色進行切換,app自帶六個默認主題,這些都是我經(jīng)過多次嘗試所挑選出來的顏色搭配。同時你也可以選擇自定義主題顏色

在app中,每項任務(wù)都會帶有一個圖標,而app提供了所有 Flutter 自帶的 Material design 風(fēng)格的圖標。這些圖標,你同樣可以進行任意顏色的自定義

在app中,有多項其他的操作是你可以進行自定義的

比如說主頁測滑欄的頭部展示內(nèi)容。當然,還有一些其他的操作,就由你去自行體驗了

當你完成了一項任務(wù)后,這個任務(wù)就會從主頁轉(zhuǎn)移到完成列表頁面,在這里你可以看到任務(wù)的一些額外信息

那么,對于使用者的介紹就到這里結(jié)束

下面就是為廣大開發(fā)者們介紹的時間了!

各位開發(fā)者們請扶好你們的秀發(fā),下面就我來帶領(lǐng)各位參觀參觀這個項目的內(nèi)部構(gòu)造

項目中使用了一些非常優(yōu)秀的第三方庫,也特別感謝這些開發(fā)者們,讓我的發(fā)量保持健康

下面就是這些控件的信息

項目使用的狀態(tài)管理框架是 codeProvider/code ,而整個項目的架構(gòu)如下

看起來是不是和 Android 中的 MVP 模式很像呢?其實都差不多的,只是名字略有不同罷了,你也可以就把上面的模式當作是 MVP 模式。

Flutter 可以說是特別適合這種架構(gòu)模式的,因為視圖跟隨數(shù)據(jù)而變化,你基本上不用去關(guān)心View,只要去對數(shù)據(jù)進行操作就好了。

項目目錄結(jié)構(gòu)如下:

先說明一下除了 lib 外的其他目錄:

然后是 lib 目錄

項目創(chuàng)建于6月21日,到如今發(fā)布1.0.0版本花了三十多天的時間,雖然我做過很多測試,解決了很多bug,但是時間確實不充裕。紕漏也會在所難免

所以如果使用過程中遇到什么問題,或者對于項目有什么好的建議,歡迎在app中的反饋界面提出來,也可以在下面留下評論,又或者在github上提issue。

項目的UI設(shè)計與后臺接口均由我獨自一人完成,所以這也是為什么時間不夠的原因。不過目前項目中只是包含了兩個自己寫的接口,后續(xù)計劃中應(yīng)該會加入登錄功能,到時候會有很多接口操作。

若有興趣,請持續(xù)關(guān)注!

如果你覺得這個app不錯,或者這個項目有幫助到你,不妨給這個項目一個Star吧。項目后面也會持續(xù)保持更新和維護!

ToDo-List

UI項目地址

密碼:Aczh

ASP.NET頁面之間傳遞值的幾種方式

URL、Session、Cookies、Server.Transfer、Application和跨頁面?zhèn)魉汀?/p>

【分析】

本題考查面試者對ASP.NET中多頁面?zhèn)髦档睦斫馐欠袢?。因為ASP.NET的頁面表單提交到自身,完成回傳的功能,所以默認情況下不能使用POST方式進行多頁面?zhèn)髦怠jP(guān)于這些傳值方式的分析如下所示。

1.URL傳值

這是經(jīng)典的傳值方式,這種方法的使用非常簡單,不過所傳遞的值是會顯示在瀏覽器的地址欄上的,而且不能傳遞對象。所以這種方法一般用于傳遞的值少且安全性要求不高的情況下。在*.aspx頁面開發(fā)中可以使用超級鏈接文本進行傳值,如以下代碼所示。

asp:HyperLink runat="server" ID="HpLink"

NavigateUrl="~/GetValues.aspx?urlvalue1=intelurlvalue2=amd"URL傳值/asp:HyperLink

以上鏈接文本將頁面跳轉(zhuǎn)到GetValues.aspx頁面,并且通過URL傳遞urlvalue1變量和urlvalue2變量,其值分別為intel和amd。在*.cs的服務(wù)器端方法中也可以調(diào)用HttpResponse對象的Redirect方法,將瀏覽器端重定向到新頁面并通過URL傳值,如以下代碼所示。

Response.Redirect(“~/GetValues.aspx?urlvalue1=intelurlvalue2=amd”);

2.Session傳值

這種方法將每份數(shù)據(jù)存儲于服務(wù)器變量中,可以傳遞比較多的數(shù)據(jù),并且安全性較高,所以常用于用戶身份的驗證功能中。不過,Session變量如果存儲過多的數(shù)據(jù)會消耗過多的服務(wù)器資源,編程者在使用時應(yīng)該慎重,其使用方法如以下代碼所示。

Session["SessionValue"] = “ATI”;

//也可以用索引存儲

Session[0] = “ATI”;

//在其他頁面的服務(wù)器端方法中取值方式為:

string str = Session["SessionValue"].ToString();

//也可以用索引獲取

string str = Session[0].ToString();

Session的可在應(yīng)用程序的多個頁面中以名稱/值對的方式共享,直到瀏覽用戶關(guān)閉自己的瀏覽器或者服務(wù)器Session超時(可設(shè)置,默認為20分鐘)。

3.Cookie傳值

Cookie是一種比較特殊的數(shù)據(jù)存儲方式,因為這種方式將數(shù)據(jù)存儲于瀏覽用戶的電腦中,以文本文件的形式存在于磁盤中。這種方式非常有意思,很多登錄系統(tǒng)就是利用Cookie實現(xiàn)用戶自動登錄。即用戶登錄一次的登錄信息將被寫入到用戶電腦的Cookie文件中,下次登錄時,網(wǎng)站自動讀取該Cookie完成身份驗證。通過Cookie傳遞數(shù)據(jù)雖然很方便,保存時間可以自由設(shè)置,但是安全性不高,編程者不應(yīng)過于依賴Cookie,而應(yīng)采用結(jié)合的方式完成敏感數(shù)據(jù)的存儲。

ASP.NET中操作Cookie的主要類型位于System.Web命名空間下,分別為HttpCookie、HttpResponse以及HttpRequest。HttpCookie可建立和操作獨立Cookie的安全類型,訪問HttpResponse和HttpRequest的Cookies屬性可以獲取HttpCookieCollection集合對象,以讀取或添加HttpCookie對象。添加Cookie的方法如以下代碼所示。

//創(chuàng)建一個HttpCookie 對象,向構(gòu)造函數(shù)傳遞名稱值

HttpCookie ck = new HttpCookie("CookieValue");

//設(shè)置ck的“Value”屬性(值)

ck.Value = “Cookie值”;

//設(shè)置ck的過期時間為當前時間加上360s,即6分鐘后失效

ck.Expires = DateTime.Now.AddSeconds(360);

//設(shè)置ck有效范圍(域限制)

ck.Domain = "";

//將ck添加至HttpCookieCollection對象

Response.Cookies.Add(ck);

//也可為以下方法添加

//Response.AppendCookie(ck);;

讀取用戶的Cookie則更為簡單,只需根據(jù)名稱讀取HttpCookieCollection集合對象中的子項即可,如以下代碼所示。

string str = Request.Cookies["CookieValue"].Value;

除此之外,還可以利用一個HttpCookie存儲多個名稱/值對形式的Cookie信息,如以下代碼所示。

HttpCookie ck = new HttpCookie("CookieValue");

//以名稱/值對的方式添加多個Cookie信息

ck.Values.Add("value1", “one”);

ck.Values.Add("value2", "two");

//設(shè)置ck的過期時間為當前時間加上100年,即100年后失效

ck.Expires = DateTime.Now.AddYears(100);

//通過以下兩種方法添加

Response.Cookies.Add(ck);

//Response.AppendCookie(ck);

讀取這些Cookie如以下代碼所示。

string str = "值1:"+Request.Cookies["CookieValue"].Values["value1"];

str += "值2:" + Request.Cookies["CookieValue"].Values["value2"];

說明:多數(shù)瀏覽器支持最多可達4096字節(jié)的Cookie,如果要將為數(shù)不多的幾個值保存到用戶計算機上,瀏覽器還限制了每個站點可以在用戶計算機上保存的Cookie數(shù)量。大多數(shù)瀏覽器只允許每個站點保存20個Cookie。如果試圖保存更多的Cookie,則最先保存的Cookie就會被刪除。還有些瀏覽器會對來自所有站點的Cookie總數(shù)作出限制,這個限制通常為300個。用戶可以設(shè)置自己的瀏覽器,拒絕接受Cookie,這種情況下只能結(jié)合其他的數(shù)據(jù)存儲方式。

4.Server.Transfer傳值

這個方法的步驟相對較多,使用該方法編程者可以在另一個頁面以公開對象屬性的方式來存取值,使用這種方法是面向?qū)ο蟮?。該方法的代碼編寫并不復(fù)雜,首先通過定義一個public權(quán)限的屬性,該屬性可返回所需傳遞的值。然后在第兩個頁面中,使用Context.Handler屬性來獲得前一個頁面實例對象的引用,即可通過訪問自定義的屬性獲取需要的值。

假設(shè)SendValues.aspx頁面為傳遞數(shù)據(jù)的頁面,在SendValues.aspx.cs的頁面類中定義一個public屬性,通過get直接返回需要傳遞的值(可為頁面中某個服務(wù)器控件的屬性值)。

public string TransferData

{

get

{

return "VIA";

}

}

在SendValues.aspx.cs的某個方法(如Button控件的Click事件處理方法)中調(diào)用HttpServerUtility對象的Transfer方法,如以下代碼所示。

Server.Transfer("~/GetValues.aspx");

假設(shè)GetValues.aspx為第二個頁面,在GetValues.aspx.cs的Page_Load方法中接收前一個頁面所傳遞的值,方法如以下代碼所示。

//定義SendValues類型的變量SV_Page

SendValues SV_Page;

//訪問HttpContext對象的Handler屬性,將值轉(zhuǎn)換為SendValues類型,引用賦值給SV_Page

SV_Page = (SendValues)Context.Handler;

//SV_Page即為SendValues.aspx頁面類的對象,直接獲取其TransferData屬性值

string str = SV_Page.TransferData;

可見,這種方法對于有面向?qū)ο蠡A(chǔ)的編程者而言非常容易理解。不過頁面間如果需要傳遞數(shù)量比較多的值,這種方法需要定義過多的屬性,略顯繁雜。編程者還可以直接使用HttpContext對象的“Iterms”屬性添加多項名稱/值對的數(shù)據(jù),在SendValues.aspx.cs調(diào)用HttpServerUtility對象的Transfer方法的某個方法中,修改代碼如下所示。

Context.Items["value1"] = "one";

Context.Items["value2"] = "two";

在GetValues.aspx.cs的Page_Load方法中接收前1個頁面所傳遞的值,修改代碼如以下代碼所示。

string str = "值1:" + Context.Items["value1"].ToString();

str += "值2:" + Context.Items["value2"].ToString();

5.Application傳值

嚴格地說應(yīng)該是通過HttpApplication對象在服務(wù)器端生成一個狀態(tài)變量來存儲所需的信息,該HttpApplication對象變量的可用范圍覆蓋整個WEB應(yīng)用程序。所以該對象一般存儲一些要公布的信息,如在線人數(shù)等,而對于那些涉及用戶個人的敏感數(shù)據(jù)則不用這種方法存儲。HttpApplication對象有兩個常用的方法,即Lock和UnLock方法,可用于處理多個用戶對存儲在Application變量中的數(shù)據(jù)進行寫入的問題。Lock方法鎖定全部的Application變量,從而阻止其他用戶修改Application對象的變量值,UnLock方法則解除對HttpApplication對象變量的鎖定。通過HttpApplication對象傳值的方法和Session比較相似,在頁面類的某個方法中編寫代碼如下所示。

Application["a"] = "微軟公司";

Application["b"] = "蘋果公司";

Application["c"] = “Mac”;

以上代碼很輕松地將三個字符串值保存在HttpApplication對象的變量中了,并且這些變量是整個程序共享的,其他用戶通過相應(yīng)的頁面同樣可以獲取。獲取這些變量的方法如以下代碼所示。

Application.Lock();

string str = "值1:" + Application["a"];

str += "值2:" + Application["b"];

str += "值3:" + Application["c"];

Application.UnLock();

注意:雖然使用方式和Session相似,但是Session是對于每個單獨的用戶,當該用戶關(guān)閉瀏覽器,則Session失效。HttpApplication對象存儲的變量是針對所有訪問程序的用戶,即使有用戶關(guān)閉了瀏覽器,變量的值不會丟失。

6.跨頁面?zhèn)魉?/p>

跨頁面?zhèn)魉秃驼{(diào)用HttpServerUtility對象的Transfer方法有相似之處,不過效率更高。因為調(diào)用HttpServerUtility對象的Transfer方法是基于服務(wù)器的方法,而跨頁面?zhèn)魉褪腔跒g覽器端的。這個方法主要是設(shè)置控件的“PostBackUrl”屬性,使該控件(如Button)操作后轉(zhuǎn)向指定頁面,并且這個指定頁面可以直接獲取前一個頁面的所有控件對象及其屬性值。假設(shè)第一個頁面為SendValues.aspx,在該頁面中(非*.cs代碼文件)添加兩個控件,設(shè)置如以下代碼所示。

asp:TextBox runat="server" ID="PbValue" Text="Geforce TX280"/asp:TextBox

asp:Button runat="server" ID="btn6" Text="跨頁面?zhèn)魉头绞? PostBackUrl="~/GetValues.aspx" /

以上代碼中,TextBox控件的“Text”屬性為“Geforce TX280”,這是所需要傳送的值。而Button控件的“PostBackUrl”屬性指定了GetValues.aspx頁面,該頁面即可接收所需傳遞的值。在GetValues.aspx.cs的Page_Load方法中,編寫以下代碼。

//PreviousPage為向當前頁面?zhèn)鬏斂丶捻撁?/p>

if (PreviousPage != null)

{

//從PreviousPage容器中搜索“ID”為PbValue的控件,并轉(zhuǎn)換為TextBox類型

TextBox tb = (TextBox)PreviousPage.FindControl("PbValue");

//如果tb不是空引用

if (tb != null)

{

//將tb的“Text”屬性值給str變量

string str = tb.Text;

}

}

以上代碼輕松獲得了前一個頁面中TextBox控件的“Text”屬性值,這種方法比調(diào)用HttpServerUtility對象的Transfer方法更加快捷,并減少了處理步驟。

以上為常用的頁面間傳值方法,如果有特殊需要,還可以使用其他方法,例如通過數(shù)據(jù)庫存儲臨時數(shù)據(jù)等


當前題目:flutter精美,Flutter精美網(wǎng)站
新聞來源:http://www.dlmjj.cn/article/dsipiio.html