……沒有具體的要求 很難有源碼~
呼蘭網站制作公司哪家好,找成都創新互聯公司!從網頁設計、網站建設、微信開發、APP開發、響應式網站等網站項目制作,到程序開發,運營維護。成都創新互聯公司成立與2013年到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選成都創新互聯公司。
給你個思路
在數據庫用戶表用添加個身份的列
然后登錄后臺的時候查詢一下 用戶是否符合身份 符合就進 不符合就T了~
如果非要源碼,這有個小項目 有一部分類似的操作
Java代碼編寫的30條實踐建議,很多人認為學習java需要較好的計算機語言基礎,而事實上高中學歷的學習java,月薪過萬的比比皆是,Java代碼編寫的30條實踐建議,java知識點學習貴在積累。
Java代碼編寫的30條實踐建議:
(1) 類名首字母應該大寫。字段、方法以及對象(句柄)的首字母應小寫。對于所有標識符,其中包含的所有單詞都應緊靠在一起,而且大寫中間單詞的首字母。
例如:
ThisIsAClassName
thisIsMethodOrFieldName
若在定義中出現了常數初始化字符,則大寫static final基本類型標識符中的所有字母。這樣便可標 志出它們屬于編譯期的常數。
Java包(Package)屬于一種特殊情況:它們全都是小寫字母,即便中間的單詞亦是如此。對于域名擴展名稱,如com,org,net或者edu等,全部都應小寫(這也是Java 1.1和Java 1.2的區別之一)。
(2) 為了常規用途而創建一個類時,請采取"經典形式",并包含對下述元素的定義:
equals()
hashCode()
toString()
clone()(implement Cloneable)
implement Serializable
(3) 對于自己創建的每一個類,都考慮置入一個main(),其中包含了用于測試那個類的代碼。為使用一個項目中的類,我們沒必要刪除測試代碼。若進行了任何形式的改動,可方便地返回測試。這些代碼也可作為如何使用類的一個示例使用。
(4) 應將方法設計成簡要的、功能性單元,用它描述和實現一個不連續的類接口部分。理想情況下,方法應簡明扼要。若長度很大,可考慮通過某種方式將其分割成較短的幾個方法。這樣做也便于類內代碼的重復使用(有些時候,方法必須非常大,但它們仍應只做同樣的一件事情)。
(5) 設計一個類時,請設身處地為客戶程序員考慮一下(類的使用方法應該是非常明確的)。然后,再設身處地為管理代碼的人考慮一下(預計有可能進行哪些形式的修改,想想用什么方法可把它們變得更簡單)。
(6) 使類盡可能短小精悍,而且只解決一個特定的問題。下面是對類設計的一些建議:
■一個復雜的開關語句:考慮采用"多形"機制
■數量眾多的方法涉及到類型差別極大的操作:考慮用幾個類來分別實現
■許多成員變量在特征上有很大的差別:考慮使用幾個類
(7) 讓一切東西都盡可能地"私有"--private。可使庫的某一部分"公共化"(一個方法、類或者一個字段等等),就永遠不能把它拿出。若強行拿出,就可能破壞其他人現有的代碼,使他們不得不重新編寫和設計。若只公布自己必須公布的,就可放心大膽地改變其他任何東西。
在多線程環境中,隱私是特別重要的一個因素--只有private字段才能在非同步使用的情況下受到保護。
(8) 謹惕"巨大對象綜合癥"。對一些習慣于順序編程思維、且初涉OOP領域的新手,往往喜歡先寫一個順序執行的程序,再把它嵌入一個或兩個巨大的對象里。根據編程原理,對象表達的應該是應用程序的概念,而非應用程序本身。
(9) 若不得已進行一些不太雅觀的編程,至少應該把那些代碼置于一個類的內部。
(10) 任何時候只要發現類與類之間結合得非常緊密,就需要考慮是否采用內部類,從而改善編碼及維護工作(參見第14章14.1.2小節的"用內部類改進代碼")。
(11) 盡可能細致地加上注釋,并用javadoc注釋文檔語法生成自己的程序文檔。
(12) 避免使用"魔術數字",這些數字很難與代碼很好地配合。如以后需要修改它,無疑會成為一場噩夢,因為根本不知道"100"到底是指"數組大小"還是"其他全然不同的東西"。所以,我們應創建一個常數,并為其使用具有說服力的描述性名稱,并在整個程序中都采用常數標識符。這樣可使程序更易理解以及更易維護。
(13) 涉及構建器和異常的時候,通常希望重新丟棄在構建器中捕獲的任何異常--如果它造成了那個對象的創建失敗。這樣一來,調用者就不會以為那個對象已正確地創建,從而盲目地繼續。
(14) 當客戶程序員用完對象以后,若你的類要求進行任何清除工作,可考慮將清除代碼置于一個良好定義的方法里,采用類似于cleanup()這樣的名字,明確表明自己的用途。除此以外,可在類內放置一個boolean(布爾)標記,指出對象是否已被清除。在類的finalize()方法里,請確定對象已被清除,并已丟棄了從RuntimeException繼承的一個類(如果還沒有的話),從而指出一個編程錯誤。在采取象這樣的方案之前,請確定finalize()能夠在自己的系統中工作(可能需要調用System.runFinalizersOnExit(true),從而確保這一行為)。
(15) 在一個特定的作用域內,若一個對象必須清除(非由垃圾收集機制處理),請采用下述方法:初始化對象;若成功,則立即進入一個含有finally從句的try塊,開始清除工作。
(16) 若在初始化過程中需要覆蓋(取消)finalize(),請記住調用super.finalize()(若Object屬于我們的直接超類,則無此必要)。在對finalize()進行覆蓋的過程中,對super.finalize()的調用應屬于最后一個行動,而不應是第一個行動,這樣可確保在需要基礎類組件的時候它們依然有效。
(17) 創建大小固定的對象集合時,請將它們傳輸至一個數組(若準備從一個方法里返回這個集合,更應如此操作)。這樣一來,我們就可享受到數組在編譯期進行類型檢查的好處。此外,為使用它們,數組的接收者也許并不需要將對象"造型"到數組里。
(18) 盡量使用interfaces,不要使用abstract類。若已知某樣東西準備成為一個基礎類,那么第一個選擇應是將其變成一個interface(接口)。只有在不得不使用方法定義或者成員變量的時候,才需要將其變成一個abstract(抽象)類。接口主要描述了客戶希望做什么事情,而一個類則致力于(或允許)具體的實施細節。
(19) 在構建器內部,只進行那些將對象設為正確狀態所需的工作。盡可能地避免調用其他方法,因為那些方法可能被其他人覆蓋或取消,從而在構建過程中產生不可預知的結果(參見第7章的詳細說明)。
(20) 對象不應只是簡單地容納一些數據;它們的行為也應得到良好的定義。
(21) 在現成類的基礎上創建新類時,請首先選擇"新建"或"創作"。只有自己的設計要求必須繼承時,才應考慮這方面的問題。若在本來允許新建的場合使用了繼承,則整個設計會變得沒有必要地復雜。
(22) 用繼承及方法覆蓋來表示行為間的差異,而用字段表示狀態間的區別。一個非常極端的例子是通過對不同類的繼承來表示顏色,這是絕對應該避免的:應直接使用一個"顏色"字段。
(23) 為避免編程時遇到麻煩,請保證在自己類路徑指到的任何地方,每個名字都僅對應一個類。否則,編譯器可能先找到同名的另一個類,并報告出錯消息。若懷疑自己碰到了類路徑問題,請試試在類路徑的每一個起點,搜索一下同名的.class文件。
(24) 在Java 1.1 AWT中使用事件"適配器"時,特別容易碰到一個陷阱。若覆蓋了某個適配器方法,同時拼寫方法沒有特別講究,最后的結果就是新添加一個方法,而不是覆蓋現成方法。然而,由于這樣做是完全合法的,所以不會從編譯器或運行期系統獲得任何出錯提示--只不過代碼的工作就變得不正常了。
(25) 用合理的設計方案消除"偽功能"。也就是說,假若只需要創建類的一個對象,就不要提前限制自己使用應用程序,并加上一條"只生成其中一個"注釋。請考慮將其封裝成一個"獨生子"的形式。若在主程序里有大量散亂的代碼,用于創建自己的對象,請考慮采納一種創造性的方案,將些代碼封裝起來。
(26) 警惕"分析癱瘓"。請記住,無論如何都要提前了解整個項目的狀況,再去考察其中的細節。由于把握了全局,可快速認識自己未知的一些因素,防止在考察細節的時候陷入"死邏輯"中。
(27) 警惕"過早優化"。首先讓它運行起來,再考慮變得更快--但只有在自己必須這樣做、而且經證實在某部分代碼中的確存在一個性能瓶頸的時候,才應進行優化。除非用專門的工具分析瓶頸,否則很有可能是在浪費自己的時間。
性能提升的隱含代價是自己的代碼變得難于理解,而且難于維護。
(28) 請記住,閱讀代碼的時間比寫代碼的時間多得多。思路清晰的設計可獲得易于理解的程序,但注釋、細致的解釋以及一些示例往往具有不可估量的價值。無論對你自己,還是對后來的人,它們都是相當重要的。如對此仍有懷疑,那么請試想自己試圖從聯機Java文檔里找出有用信息時碰到的挫折,這樣或許能將你說服。
(29) 如認為自己已進行了良好的分析、設計或者實施,那么請稍微更換一下思維角度。試試邀請一些外來人士--并不一定是專家,但可以是來自本公司其他部門的人。請他們用完全新鮮的眼光考察你的工作,看看是否能找出你一度熟視無睹的問題。采取這種方式,往往能在最適合修改的階段找出一些關鍵性的問題,避免產品發行后再解決問題而造成的金錢及精力方面的損失。
(30) 良好的設計能帶來最大的回報。簡言之,對于一個特定的問題,通常會花較長的時間才能找到一種最恰當的解決方案。但一旦找到了正確的方法,以后的工作就輕松多了,再也不用經歷數小時、數天或者數月的痛苦掙扎。我們的努力工作會帶來最大的回報(甚至無可估量)。而且由于自己傾注了大量心血,最終獲得一個出色的設計方案,成功的快感也是令人心動的。堅持抵制草草完工的誘惑--那樣做往往得不償失。
前臺是顯示的~后臺是處理操作的~
不能說javascript就是前臺~
有的javascript可以直接操作java代碼的~比如dwr框架~!!
而jsp的話呢,可以這樣來理解,
java代碼 + HTML代碼 + 一些事先規定的標簽 = jsp
jsp的出現就是解決用java程序輸出HTML代碼,在編輯時太麻煩了
舉個例子,假如我想輸出一個表格
//java代碼
String a="1";
String b="Tom";
out.print("table border=1");
out.print("trtdindex/td tdname/td/tr");
out.print("trtd"+a+"/td td"+b+"/td/tr");
out.print("/table");
//jsp代碼
%
String a="1";
String b="Tom";
%
table
trtdindex/tdtdname/td/tr
trtd%=a%/tdtd%=b%/td/tr
/table
===========================
可以看出來第二種看起來更直觀,更重要的是第二種寫法在HTML編輯工具中是可以預覽出效果來的,編輯起來相當方便
JSP概括起來就是動態生成內容和靜態HTML布局代碼結合的產物
===========================
ASP,ASP.NET, PHP 等等這些都是一樣的原理
一、eclispse是寫開發代碼的軟件,最簡單的理解方法就是,你用記事本寫文字,文字等于編程語言的代碼,記事本就等于eclipse。明白?
二、tomcat是你這個系統運行所需要的服務器,現在很多小型中型網站大多用tomcat做服務器。
三、jdk是英文全程是Java Development Kit。
四、mysql manager是你的數據庫管理程序,你只要打開他可以不用登陸數據庫空間就可以管理數據庫。使用方法網上很多。
五、mysql是數據庫軟件,相當于其他的oracal、sqlserver什么的,只不過比這兩款小,但是速度快。
原理:
jsp是負責前臺表示層,也就是你看到的網頁內容,java是業務處理層,實際上jsp和javabean都屬于java語言。具體舉例如下:(以訂購系統為例)
一、點擊產品瀏覽,product_list.jsp,(此頁面顯示所有的CD產品),頁面發送“查找產品類型=CD”的指令給javaBean,javaBean負責建立數據庫連接和獲取該指令,然后將“查找產品類型=CD”的指令傳給MYsql去執行具體的查詢操作。
二、mysql將獲取的結果集返回給javaBean,javaBean將此結果返回給jsp頁面,jsp遍歷集合形成產品的列表頁。
簡化流程jsp-javaBean-mysql-javaBean-jsp.
其實最好是jsp+servlet(控制器)+javabean+mysql這種寫法。
明白否?
dw里面的做的html
將body區復制粘貼到vs里面不就行了嗎!我就是這樣做的
dw也支持.net程序,你創建虛擬目錄是應用程序設為.net的就可以了,創建的文件后綴是.aspx然后設計,最后用vs寫代碼
經常會碰到在前臺代碼中要使用(或綁定)后臺代碼中變量值的問題。一般有%= str%和%# str %兩種方式,這里簡單總結一下。如有錯誤或異議之處,敬請各位指教。
一方面,這里所講的前臺即通常的.aspx文件,后臺指的是與aspx相關聯的CodeBehind,文件后綴名為.aspx.cs;另一方面,這里的綁定是指用戶發出訪問某一頁面指令后,服務器端在執行過程中就已經將前臺代碼進行了賦值,而后生成html格式回傳客戶端顯示,而并非已經顯示到客戶端后,然后通過其他方法(如ajax)去服務器端獲取相應變量。
備注:上面說的兩個文件是常見的代碼隱藏(code-behind)模式,還有一種是代碼嵌入(code-beside, inline)模式,那就是只存在aspx一個文件,而后臺代碼則寫入此文件的script type="text/javascript" runat="server"/script之中(還有一些語法上區別),這對于本文討論的問題略有影響,因為代碼嵌入是聲明性代碼與C#/VB.NET代碼都一起編譯到一個類里面,而代碼隱藏則將聲明性代碼與C#/VB.NET代碼分開幾次進行翻譯/編譯,因此前者是局部與局部(partial)的關系后者基類與派生類的關系,但這僅僅影響所能綁定變量的范圍(與修飾符有關),下面會提到。以下均以代碼隱藏模式為例。
一般來說,在前臺代碼的三種位置可能會用到(綁定)后臺變量:
服務器端控件屬性或HTML標簽屬性
JavaScript代碼中
Html顯示內容的位置(也就是開始標簽與結束標簽之間的內容,如div這里/div(Html標簽)或者asp:Label ID="Label2" runat="server" Text="Label"這里/asp:Label(服務器端控件),它作為占位符把變量顯示于符號出現的位置)
對于第一種位置,有一些約束條件:
(1)一般的屬性要求是字符串型或數值型(下面會提到有些服務器端屬性支持屬性為數據集合);
(2)并不是所有的屬性都可以綁定變量,有些屬性例如runat屬性必須是"server"常量,即使綁定的字符串是server,也會導致分析器分析時出錯;
(3)有一種屬性,他要求屬性值有約束(類型約束,比如服務器端控件要求TabIndex屬性是short類型,或者字符串內容有約束),也應該在綁定時滿足,否則依然可能編譯時報錯;
(4)還一種屬性,雖然屬性本身有約束,但即使綁定的變量不滿足約束,也可以編譯通過,比如input的checked屬性,它只有checked字符串是合法的,但如果通過綁定獲取到的字符串不是checked,那么這些屬性將有自己內部處理機制,來保證可以正常使用;
(5)還要注意,即使對于同一類屬性,服務器端和HTML的屬性的處理機制也不同,同樣是TabIndex(tabIndex),前者如果不滿足,則分析器錯誤,后者則忽略這一問題。
對于第二種位置,一般只要綁定的后臺變量和JavaScript中數據類型兼容即可。
對于第三種位置,如果綁定出現的位置不在服務器端控件內部,則沒有約束條件,只要是常量字符串可以出現的位置,均可以綁定。但是對于置于服務器端控件內部,也就是上面那種asp:Label ID="Label2" runat="server" Text="Label"這里/asp:Label的方式,則有約束條件。通過總結,歸納為四類服務器端控件,如果綁定的代碼出現在這些控件的開始和結束標簽之間(這里所說的控件,是指如果綁定代碼外有多層的嵌套控件包圍,則是指包圍綁定代碼的最內層控件),有不同的顯示結果:
(1)約束型控件:這類控件要求它的開始標簽和結束標簽中只能包含指定的子控件,因此如果在這里出現代碼塊,將編譯錯誤。例如:
asp:DataList runat="server"/asp:DataList,在它之間,要求必須嵌套ItemTemplate/ItemTemplate。
(2)非嵌套類控件:這類控件,不允許在內部嵌套其他控件或標簽,只能是常量字符串,它會將開始標簽和結束標簽中常量字符串內容作為他的屬性。例如上面提到的TextBox,它會將標簽間內容作為它的Text屬性值。
(3)嵌套類控件:這類控件,可以嵌套其他任意控件,也可以包含字符串,因此可以正常顯示綁定代碼塊所表示的字符串內容。例如Label控件、Panel等。
(4)數據綁定類控件:這類控件是ASP.NET提供的服務器端控件,除了可以綁定普通的變量類型,也可以綁定一個數據集合(只能采取下面的第二種方式實現)。
關于是否加引號:在以上三個位置使用時,是否應該將%= str%或%# str %置于單引號或雙引號中呢?對于在不同位置,處理的方式是不同的:(具體請在下面兩種方式的具體介紹時,加以體會)
(1)對于第一種位置,由于JavaScript是弱類型的,如果綁定時加引號,顯然就認為就當做字符串來處理,這始終是正確的;如果綁定時不加引號,它將認為這是個數值型的,那么如果獲取的真是數值,當然可以,如果是非數值型,則將產生腳本錯誤,這即使對于JavaScript賦值常量時,也是同樣的:
以下為引用的內容:
var test1 = 123b;//運行時報錯
var test2=123;//正確,是數值型
var test3="123b";//正確,字符串型
(2)對于第二種位置,經過測試,無論是對于服務器端控件屬性還是HTML標簽屬性,加引號總是正確的;如果不加引號,則兩種屬性的處理方式不同:
對于服務器端控件屬性,如果綁定的代碼塊不加引號,則編譯時會提示“驗證(ASP.NET):特性值前后必須加引號”的警告信息,但是生成為HTML后,對應生成的HTML屬性已經被加上引號并獲取了正確的綁定結果,因此加不加引號不會影響使用,但是建議對于規范的代碼,還是加上為好;
對于HTML標簽屬性,如果不加引號,則編譯時會提示“驗證(XHTML 1.0 Transitional): 特性值前后必須加引號”的警告信息,并且生成為HTML屬性也確實沒有加上引號,那么雖然屬性后面確實是沒有加上引號的正確的綁定值,但是不一定能展示出想要看到的結果。比如對于input標簽的value屬性,如果綁定的字符串是" hello world from variable”,則在客戶端的input顯示出的內容實際上只是"hello”字符串,生效的屬性值是一個被截斷的字符串,它從屬性后的一串字符串(若未加引號)的第一個非空字符開始,截止到下一個空字符的前一個字符為止(比如對于" hello world”,結果將是"hello”),因此,加上引號是必須的。
(3)對于第三種位置,加與不加引號,獲取的值及其顯示均不受影響。
因此建議,所有綁定表達式都加上引號,作為字符串獲取,然后根據實際需求,用相應函數進行轉換,得到所需要的類型。
另外,這里所說的后臺變量是泛指的,包括如下:
成員變量
方法或屬性的返回值
表達式,也就是所有后臺能夠執行的代碼,運行后所得到的值(也就是直接將后臺代碼寫在前臺代碼中,記得使用完全限定名或在后臺中using相關namespace)
數據集合
后臺變量有一些約束條件,需要滿足:
(1)變量修飾符要求。變量是靜態或者實例字段均可。對于代碼隱藏模式的ASP.NET,以上的所述的變量必須為public或protected類型(因為是基類與派生類的關系),private或者internal都不行,而代碼嵌入模式則任何修飾符的變量均可訪問(一個類內部的關系)。
(2)變量類型要求。由于前臺屬性一般是字符串類型,而JavaScript基本類型也就是字符串型、數字型、布爾型,因此對應的變量應該也是這幾種方式,其余類型如果不被支持(如復雜類型、數組、引用類型等),前臺獲取的就是調用了變量的ToString()方法所得到的字符串。因此,在綁定時,要根據情況看是否能進行隱式類型轉換,必要時還要用相關函數來強制轉換,以保證前臺可以獲得正確的值。當然,對于數據綁定類控件,它的有些屬性可以為數據集合,但這時的綁定只能通過下面第二種方式才被支持。
以上是一些概念和基本約束,這些都是兩種方式都應該滿足的,下面具體介紹兩種方式,來實現前臺代碼中(以下稱為代碼塊)綁定后臺變量的功能。
一. %= str%
此種方式其實是ASP 時代就支持的,ASP 通過包含在 % 和 %中的表達式將執行結果輸出到客戶瀏覽器 , 如: % =test %就是將變量test的值發送到客戶瀏覽器中。在ASP.NET中,這個表達式依然可以使用,并可以出現在前臺代碼的上述三個位置,但是要注意,除了上述的一般性約束外,對于控件屬性,還必須是綁定到非服務器端控件的屬性。另外,它只能綁定上面講的前三種變量類型,不支持綁定數據集合。例子如下:
后臺代碼:
以下為引用的內容:
public partial class WebForm2 : System.Web.UI.Page
{
public string GetVariableStr;//注意變量的修飾符
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GetVariableStr = "hello world from variable";
}
}
protected string GetFunctionStr()//注意返回值的修飾符
{
return "hello world from Function";
}
}
前臺代碼:
以下為引用的內容:
html xmlns=""
head
title/title
script type="text/javascript"
function fun() {
var str = '%= DateTime.Now %';
//前臺位置1,綁定的是第三種變量類型(也是第二種方式,?因為Now是個屬性)
alert(str);
}
/script
/head
body onload="fun()"
form id="form1" runat="server"
div
input type="text" value="%= GetVariableStr %" /
%--前臺位置2,綁定的是成員變量--%
"%= GetFunctionStr() %"
%--前臺位置3,綁定的是一個方法的返回值--%
/div
/form
/body
/html
一些錯誤的使用:
之所以說第一種綁定方式要用于非服務器端控件的屬性,是因為如果應用于這些服務器端屬性時,這些代碼實際上不被解析。 比如:
以下為引用的內容:
asp:Label ID="Label1" runat="server" Text="%= GetVariableStr %"/asp:Label
asp:TextBox ID="TextBox1" runat="server" Text="%= GetVariableStr %"/asp:TextBox
則顯示出來的Label1的文本是空,而TextBox中文本是"%= GetVariableStr %”,所以記住,對服務器端控件的屬性加這樣的代碼塊,將不被解析,而是將這一字符串直接作為屬性值了,所以不是想要的結果。如果引號也不加上,將會編譯錯誤,提示“服務器標記不能包含 % ... % 構造。”。
這里結合開篇提到的關于將綁定代碼快置于“Html顯示內容的位置”時,如果在服務器端控件內,那四類控件如何顯示的問題。如下:
以下為引用的內容:
asp:Label ID="Label1" runat="server" "%= GetVariableStr %"/asp:Label
asp:TextBox ID="TextBox1" runat="server" "%= GetVariableStr %"/asp:TextBox
其中,Label1屬于嵌套類控件,Label1確實顯示了正確的結果,TextBox屬于非嵌套類控件,TextBox如果用這種方式,將會產生編譯錯誤,提示“此上下文中不支持代碼塊。”
二. %# str %
ASP.NET 引入了一種新的聲明語法 %# %。該語法是在 .aspx 頁中使用數據綁定的基礎,所有數據綁定表達式都必須包含在這些字符中。這里從用法和適用范圍等方面與第一種綁定方式進行區分。
從出現的位置來看,除了能出現在第一種代碼塊出現的所有位置外,他還可以出現在服務器端控件的屬性中。
從綁定的變量類型上看,他還可以配合ASP.NET的數據綁定類控件,來綁定上述的第四種“變量”類型,就是數據集合(DropDownList,DataList,DataGrid,ListBox這些是數據綁定類控件,數據集合包括ArrayList(數組),Hashtable(哈稀表,DataView(數據視圖),DataReader等)。
從用法上看,在前臺代碼中除了在相應位置寫上%# %外,在后臺代碼中,還需要使用DataBind()方法。以下是實例:
前臺代碼:
以下為引用的內容:
html xmlns=""
head
title/title
script type="text/javascript"
function fun() {
var str = '%# DateTime.Now %';
alert(str);
}
/script
/head
body onload="fun()"
form id="form1" runat="server"
div
input type="text" value="%# GetVariableStr %" /br /
"%# GetVariableStr %"
asp:Label ID="Label1" runat="server" Text="%# GetVariableStr %"/asp:Label
%--此種方式可以綁定服務器端控件的屬性--%
asp:DropDownList ID="DropDownList1" runat="server" DataSource='%# arraylist %'
%-- 將集合綁定到數據綁定類控件,通過DataSource屬性來實現,從而在下拉框看到集合中的內容--%
/asp:DropDownList
asp:DataList ID="DataList1" runat="server" DataSource='%# dt %'
%-- 同上,綁定了DataTable數據集合?--%
ItemTemplate
table border="1" cellpadding="0" cellspacing="0"
tr
td
asp:Label ID="Label2" runat="server" Text='%# Bind("row0")%'/asp:Label
%--由于綁定的數據集合具有多列,并且此數據綁定類控件支持模板,
因此需要在模板中指定需要綁定的列以及格式--%
/td
td
%# Eval("row1")%
/td
/tr
/table
/ItemTemplate
/asp:DataList
/div
/form
/body
/html
可以看出,這種方式在使用時,不但可以實現(取代)%=... %所滿足的功能,還可以綁定服務器控件屬性(如上面的Label1),也可以將集合類型綁定到支持的數據綁定類控件。在用法上,前臺代碼除了對數據綁定類控件綁定數據集合外有所差別,其他的使用上與第一種沒區別。在綁定類控件的模板中,如何使用Eval、Bind、DataBinder.Eval等,不在此文討論中,可以參考下面鏈接的參考文章。
后臺代碼:
以下為引用的內容:
public partial class WebForm2 : System.Web.UI.Page
{
public string GetVariableStr;
public ArrayList arraylist;
public DataTable dt;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GetVariableStr = "hello world from variable";
arraylist = new ArrayList();
arraylist.Add("選?項?1");
arraylist.Add("選?項?2");
dt = new DataTable();
dt.Columns.Add("row0");
dt.Columns.Add("row1");
DataRow dr1 = dt.NewRow();
dr1[0] = "1.1";
dr1[1] = "1.2";
DataRow dr2 = dt.NewRow();
dr2[0] = "2.1";
dr2[1] = "2.2";
dt.Rows.Add(dr1);
dt.Rows.Add(dr2);
Page.DataBind();
//DropDownList1.DataBind();
//DataList1.DataBind();
}
}
}
在后臺代碼中,與第一種方式唯一不同的,就是需要調用DataBind方法。只有執行了相應控件的DataBind方法,前臺代碼中這些控件中使用%# %的綁定才會發生(并且控件內部的所有綁定也會發生,比如又嵌套了一個綁定后臺數據的控件),否則得話將不會被賦值,而是默認空值。上面我們用的是Page的DataBind方法,那么整個頁面所有綁定都會執行。當然,如果我們只執行DataList1或者DropDownList1的DataBind方法,那么只有相應控件的綁定才會發生。需要注意的是,這里說的需要執行DataBind包括了顯示和隱式執行,有些數據綁定類控件,當它們通過 DataSourceID 屬性綁定到數據源控件時,會通過隱式調用 DataBind 方法來執行綁定。這時就不必顯示的再次調用了。
兩者區別:
兩種綁定方式上,他們的約束基本相同,都要求與屬性匹配,出現在他們可以出現的位置。后者的使用位置更廣泛,尤其是支持服務器端控件和綁定數據集合。后臺代碼方面,后者需要調用DataBind才能完成綁定,前者則沒有這方面要求。這里主要區別一下兩者在執行機制上的區別:%=...%是在程序執行時調用(應該是在頁面的RenderControl事件過程中完成的,也就是通常情況下我們可以看到的后臺代碼都執行完畢后再去到前臺代碼中進行賦值綁定),而%#... %是在DataBind()方法之后被調用,一旦調用了DataBind(),則它對應的控件將綁定變量,因此,請注意:如果在DataBind()后再修改變量,那么綁定的就不是最新值了,這就需要在完成變量的賦值后,再去DataBind()。其實這兩種方式,它的運行過程可以在VS中通過設置斷點來看看,看兩者的綁定賦值分別是在什么時候發生的。
網站標題:java商城前后臺代碼 java 商城源代碼
本文地址:http://vcdvsql.cn/article42/hehjhc.html
成都網站建設公司_創新互聯,為您提供品牌網站制作、網站改版、網站設計、搜索引擎優化、云服務器、營銷型網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯