最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.Net頁(yè)面局部更新引發(fā)的思考

 更新時(shí)間:2016年06月17日 12:50:43   作者:波谷  
這篇文章主要是由.Net頁(yè)面局部更新引發(fā)的一系列思考,整理了實(shí)現(xiàn)局部更新的解決方案及改進(jìn)方案,感興趣的小伙伴們可以參考一下

最近在修改以前做的模塊,添加一個(gè)新功能。整理了下才發(fā)現(xiàn)重用率很低,大部分的東西還是需要重新寫(xiě)。功能里用到了局部更新,所有整理一下一路來(lái)實(shí)現(xiàn)局部更新的解決方案及改進(jìn)。 

我接觸的項(xiàng)目開(kāi)發(fā)大多是以Asp.net WebForm開(kāi)發(fā)的,自然會(huì)用到UpdatePanel,好處就是開(kāi)發(fā)快、方便,當(dāng)然產(chǎn)生的問(wèn)題也是一大堆。然后是Ajax和一般處理程序配合實(shí)現(xiàn)異步請(qǐng)求更新。最后就是利用第三方綁定插件優(yōu)化Ajax請(qǐng)求。 

一、UpdatePanel 
將需要更新的模塊放入U(xiǎn)pdatePanel的ContentTemplate中,區(qū)域內(nèi)的回發(fā)將不會(huì)刷新整個(gè)頁(yè)面。并且響應(yīng)的內(nèi)容也僅僅是UpdatePanel里面更新的內(nèi)容
 如:查詢(xún)

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
  <ContentTemplate>
   <div style="margin: 8px 0px;">
   <asp:TextBox ID="tbKey" runat="server" CssClass="form-control"></asp:TextBox>&nbsp;<asp:Button ID="btnQuery" runat="server" Text="查詢(xún)" CssClass="btn-box btn-submit-box" OnClick="btnQuery_Click" />
   </div>
   <table class="data-table">
   <tr>
    <th>ID</th>
    <th>姓名</th>
    <th>年齡</th>
    <th>住址</th>
    <th>入職日期</th>
    <th>部門(mén)</th>
    <th>薪水</th>
   </tr>
   <asp:Repeater ID="RepeaterEmp" runat="server">
    <ItemTemplate>
    <tr>
     <td><%#Eval("ID") %></td>
     <td><%#Eval("Name") %></td>
     <td><%#Eval("Age") %></td>
     <td><%#Eval("Address") %></td>
     <td><%#Eval("JoinDate") %></td>
     <td><%#Eval("Department") %></td>
     <td><%#Eval("Salary") %></td>
    </tr>
    </ItemTemplate>
   </asp:Repeater>
   </table>
  </ContentTemplate>
  </asp:UpdatePanel> 

使用UpdatePanel不需要寫(xiě)任何異步請(qǐng)求的代碼就能實(shí)現(xiàn)局部更新,但性能會(huì)有一定的影響,并且靈活性、重用性不高。

2.Ajxa和一般處理程序
 首先新建一個(gè)一般處理程序,接收查詢(xún)參數(shù),返回查詢(xún)后的員工信息,默認(rèn)返回所有的信息。
 如:查詢(xún) 

p>

使用Ajax查詢(xún)靈活性高,但html代碼的拼接有點(diǎn)煩,當(dāng)然有很多種方法可以改善。下面繼續(xù)介紹。

function ajaxquery() {
  $.ajax({
  url: "/DataService/getEmployee.ashx",
  type: "GET",
  cache: false,
  data: { key: $("#ajaxkey").val() },
  dataType: "json",
  success: function (data, textStatus) {
   if (data.code == "ok") {
   $("#ajaxtable tr.row").remove();
   var html = "";
   for (var i = 0; i < data.res.length; i++) {
    html += "<tr class='row'><td>" + data.res[i].ID + "</td><td>" + data.res[i].Name + "</td><td>" + data.res[i].Age + "</td><td>" + data.res[i].Address + "</td><td>" + data.res[i].JoinDate + "</td><td>" + data.res[i].Department + "</td><td>" + data.res[i].Salary + "</td></tr>"
   }
   if (html == "")
    html += "<tr class='row'><td colspan='7'>沒(méi)有任何記錄,請(qǐng)改進(jìn)查詢(xún)條件</td></tr>";
   $("#ajaxtable").append(html);
   }
   else {
   alert(data.info);
   }
  },
  error: function (XMLHttpRequest, textStatus, errorThrown) {
   alert("網(wǎng)絡(luò)繁忙,請(qǐng)刷新頁(yè)面!");
  }
  });
 } 

三、Avalonjs改善代碼拼接
 Angularjs用得也比較多,但是太龐大了,所有找到一個(gè)比較適合一般開(kāi)發(fā)的Avalonjs。
 我之前在博問(wèn)里問(wèn)過(guò)這樣一個(gè)問(wèn)題:有沒(méi)有jquery數(shù)據(jù)雙向綁定插件,有臟檢查的。只是和大家探討,我見(jiàn)過(guò)一個(gè)DataSet js插件,所有的數(shù)據(jù)以json的形式綁定的DataSet,DataSet本身實(shí)現(xiàn)臟檢查,其余控件都綁定相應(yīng)的DataSet的某個(gè)屬性。只要某個(gè)綁定控件值發(fā)生改變,就可以從DataSet中獲取僅僅改變的數(shù)據(jù)(而不是整個(gè)json)?;卮鸬膸缀跏茿ngularjs。其與的也都是基本的雙向綁定,所以臟檢查還是要自己實(shí)現(xiàn)。 
使用Avalonjs首先引入js文件,然后定義controller
 如:查詢(xún)

 <div ms-controller="avalonCtrl">
  <div style="margin: 8px 0px;">
  <input type="text" class="form-control" ms-duplex="key" />
  &nbsp;
  <input type="button" value="查詢(xún)" ms-click="query" class="btn-box btn-submit-box" />
  </div>
  <table class="data-table">
  <tr>
   <th>ID</th>
   <th>姓名</th>
   <th>年齡</th>
   <th>住址</th>
   <th>入職日期</th>
   <th>部門(mén)</th>
   <th>薪水</th>
  </tr>
  <tr ms-repeat-emp="emps">
   <td>{{emp.ID}}</td>
   <td>{{emp.Name}}</td>
   <td>{{emp.Age}}</td>
   <td>{{emp.Address}}</td>
   <td>{{emp.JoinDate}}</td>
   <td>{{emp.Department}}</td>
   <td>{{emp.Salary}}</td>
  </tr>
  </table>
 </div> 
   
 var vm = avalon.define({
  $id: "avalonCtrl",
  emps: [],
  key: "",
  query: function () {
  $.ajax({
   url: "/DataService/getEmployee.ashx",
   type: "GET",
   cache: false,
   data: { key: vm.key },
   dataType: "json",
   success: function (data, textStatus) {
   if (data.code == "ok") {
    vm.emps = data.res;
   }
   else {
    alert(data.info);
   }
   },
   error: function (XMLHttpRequest, textStatus, errorThrown) {
   alert("網(wǎng)絡(luò)繁忙,請(qǐng)刷新頁(yè)面!");
   }
  });
  }
 }); 

最后回到臟檢查:如果把這個(gè)改進(jìn)成可編輯的表格,怎么去監(jiān)聽(tīng)哪些行被修改,保存的時(shí)候不應(yīng)該提交整個(gè)表格數(shù)據(jù),而應(yīng)該提交修改的行數(shù)據(jù)?

本文代碼:下載
 本文地址:http://www.cnblogs.com/liuxiaobo93/p/5593393.html

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

武穴市| 大荔县| 镇坪县| 佛山市| 井研县| 聊城市| 郓城县| 嫩江县| 清苑县| 什邡市| 双鸭山市| 常德市| 广昌县| 江永县| 微山县| 石城县| 石楼县| 鄂尔多斯市| 平乡县| 兴文县| 河东区| 长宁区| 四会市| 华安县| 青海省| 盐城市| 普兰县| 东阳市| 临武县| 绥江县| 阳朔县| 金秀| 上虞市| 浦东新区| 贵德县| 苍溪县| 团风县| 新民市| 化隆| 长海县| 玛多县|