前言

          現(xiàn)在有人談起webform 一般都會說這種技術(shù)已經(jīng)過時(shí)了,毫無用處。

          因?yàn)槲覀冊谌粘i_發(fā)中已經(jīng)不會去開發(fā)哪種幾個簡單的網(wǎng)頁的程序,我們的業(yè)務(wù)更加復(fù)雜,這種拖動式的過于死板。


          但是是否毫無用處呢?其他的我不知道,但是如果做一個簡單的工具類網(wǎng)頁還是感覺非常清晰的,然后日常寫一些東西的時(shí)候我們需要一個界面去展示我們測試的數(shù)據(jù),那么我還是覺得這東西挺方便的。


          以前學(xué)習(xí)webform的時(shí)候是在上學(xué)期間,做項(xiàng)目用了一個學(xué)期(好吧,非常古老了),后來都是mvc了。下面我闡述一些自己做工具和日常在控制臺不好顯示的時(shí)候使用webform的一個好處。

          正文

          更新頁面不刷新

          我覺得無論作為工具,還是測試,現(xiàn)在頁面我希望頁面更新的時(shí)候,是不希望刷新頁面的。

          那么webfrom是如何實(shí)現(xiàn)的。

          有兩種方式:

          第一種:
          <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1"
          runat="server"> </asp:ScriptManager> <asp:UpdatePanel ID="UpdatePanel2"
          runat="server"> <ContentTemplate> <asp:Label ID="Time1" runat="server"
          Text="Timel"></asp:Label> <asp:Button runat="server" Text="按鈕1"
          OnClick="OnClick" /> </ContentTemplate> </asp:UpdatePanel> <asp:UpdatePanel
          ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:Label ID="Time2"
          runat="server" Text="Time2"></asp:Label> <asp:Button runat="server" Text="按鈕2"
          OnClick="OnClick" /> </ContentTemplate> </asp:UpdatePanel> </form> </body>
          顯示界面如下:



          你需要引入:ScriptManager 組件,ScriptManager 一定要在form中,一般form會包裹整個網(wǎng)站的html。

          然后你僅僅需要在UpdatePanel中寫入你需要更新的元素。

          比如第一個按鈕一,有一個事件onclick。那么這個事件會對應(yīng)后臺的:
          protected void OnClick(object sender, EventArgs e) { this.Time1.Text =
          System.DateTime.Now.ToString(); this.Time2.Text =
          System.DateTime.Now.AddDays(1).ToString(); }
          我僅僅需要設(shè)置this.Time1和this.Time2的值,那么他們就會刷新,也不會刷新整個頁面。



          看一下原理:

          它會去做一個請求:





          然后獲得到我們需要刷新的部分:



          我覺得不需要過多的去關(guān)注著如何刷新,因?yàn)橐呀?jīng)非常成熟,加上其現(xiàn)在用了做工具。

          這時(shí)候有人問了,做工具或者測試的時(shí)候也需要自定義一些復(fù)雜的回調(diào)啊。那么這時(shí)候pageMethods可以幫你實(shí)現(xiàn),你不需要去引入任何庫,因?yàn)閣ebfrom自帶。

          第二種:
          <body> <form id="form1" runat="server"> <div> <asp:ScriptManager
          ID="ScriptManager1" runat="server" EnablePageMethods="true">
          </asp:ScriptManager> <script type="text/javascript">
          PageMethods.set_path("About.aspx"); function tips() { var txt =
          document.getElementById("TextBox1").value; PageMethods.callmethod(txt,
          funRight); } function funRight(val, value2) //回調(diào)函數(shù),用val接受后臺代碼aa的執(zhí)行結(jié)果 {
          alert(val); } </script> <asp:Label ID="Label1" runat="server"
          Text="請輸入信息:"></asp:Label> <asp:TextBox ID="TextBox1"
          runat="server"></asp:TextBox> <input type="button" value="轉(zhuǎn)發(fā)我輸入的內(nèi)容"
          onclick='tips()' id="btnGetServerTime" /> </div> </form> </body>
          效果:



          其實(shí)重點(diǎn)看tips就好,PageMethods.callmethod(txt, funRight);

          這個PageMethods是渲染引擎引入的,后面我會介紹。

          那么這個會執(zhí)行后臺的callmethod方法,txt是傳入的參數(shù),funRight是成功回調(diào)。

          看下后臺:
          [WebMethod] //[ScriptMethod(ResponseFormat = ResponseFormat.Json)] public
          static string callmethod(string str) { return "您輸入的是:"+ str; }
          拿到數(shù)據(jù)后,加上“您輸入的是:”,然后返回。

          效果:



          介紹一下原理:

          它會去后臺調(diào)用callmethod方法,



          然后會返回:



          那么看下PageMethods.callmethod為什么會去調(diào)用到我們后臺的方法:



          上圖我們看到這個會幫我們生成callmethod方法,然后調(diào)用對應(yīng)的接口,這讓我們的代碼看起來清爽。

          數(shù)據(jù)綁定

          后臺加上有一個類:
          /// <summary> /// Users 的摘要說明 /// </summary> public class Users { private
          string Nickame; private string Sex; public Users(string nickName,string sex) {
          this.Nickame = nickName; this.Sex = sex; } public string Sex1 { get => Sex; set
          => Sex = value; } public string Nickame1 { get => Nickame; set => Nickame =
          value; } }
          然后前臺:
          <body> <form id="form1" runat="server"> <div> <table> <%--創(chuàng)建一個表格--%> <thead>
          <%--表格的表頭--%> <tr> <%--每一列的列名--%> <td>用戶</td> <td>性別</td> < /tr> </thead>
          <tbody> <%--表格的主體--%> <asp:Repeater ID="Repeater1" runat="server"> <%--循環(huán)數(shù)據(jù)--%>
          <ItemTemplate> <tr> <%--括號內(nèi)為屬性名--%> <td><%#Eval("Nickame1") %></td>
          <td><%#Eval("Sex1") %></td> </tr> </ItemTemplate> </asp:Repeater> </tbody>
          </table> </div> </form> </body>
          那么如何綁定:
          List<Users> users = new List<Users> { new Users("張三","男"),new Users("李四","女")
          }; Repeater1.DataSource = users;//指定數(shù)據(jù)源 Repeater1.DataBind();//綁定數(shù)據(jù)源
          效果:



          這樣就可以直接綁定我們的數(shù)據(jù)了。

          關(guān)于ui

          ui的話,直接找個庫,最好找一個純的css庫。

          總結(jié)

          webform的確不適合我們的一些中大型和一些復(fù)雜的頁面了。

          但是webform用來做測試或者日常的控制臺替代品還是比較好的,可以看到其實(shí)webform做一些小的東西,還是非常清爽的,做小型工具的話,上面這些完全夠用。

          我們可以不用過多的js代碼(傷眼睛),注重的更多的是邏輯,我們可以把我們的關(guān)注點(diǎn)轉(zhuǎn)移到功能實(shí)現(xiàn)上去。

          上面只是個人觀點(diǎn),如有不同的觀點(diǎn),請包容指正。

          友情鏈接
          ioDraw流程圖
          API參考文檔
          OK工具箱
          云服務(wù)器優(yōu)惠
          阿里云優(yōu)惠券
          騰訊云優(yōu)惠券
          京東云優(yōu)惠券
          站點(diǎn)信息
          問題反饋
          郵箱:[email protected]
          QQ群:637538335
          關(guān)注微信

                WWW·操逼 | 日本视频一区二区 | 人人操人人人 | 嗯嗯嗯啊啊啊在线观看 | 国产精品成人无码A片噜噜 |