.Net頁面局部更新引發(fā)的思考
最近在修改以前做的模塊,添加一個新功能。整理了下才發(fā)現(xiàn)重用率很低,大部分的東西還是需要重新寫。功能里用到了局部更新,所有整理一下一路來實現(xiàn)局部更新的解決方案及改進。
我接觸的項目開發(fā)大多是以Asp.net WebForm開發(fā)的,自然會用到UpdatePanel,好處就是開發(fā)快、方便,當(dāng)然產(chǎn)生的問題也是一大堆。然后是Ajax和一般處理程序配合實現(xiàn)異步請求更新。最后就是利用第三方綁定插件優(yōu)化Ajax請求。
一、UpdatePanel
將需要更新的模塊放入UpdatePanel的ContentTemplate中,區(qū)域內(nèi)的回發(fā)將不會刷新整個頁面。并且響應(yīng)的內(nèi)容也僅僅是UpdatePanel里面更新的內(nèi)容
如:查詢


<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<div style="margin: 8px 0px;">
<asp:TextBox ID="tbKey" runat="server" CssClass="form-control"></asp:TextBox> <asp:Button ID="btnQuery" runat="server" Text="查詢" 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>部門</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àn)局部更新,但性能會有一定的影響,并且靈活性、重用性不高。
2.Ajxa和一般處理程序
首先新建一個一般處理程序,接收查詢參數(shù),返回查詢后的員工信息,默認(rèn)返回所有的信息。
如:查詢
p>

使用Ajax查詢靈活性高,但html代碼的拼接有點煩,當(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'>沒有任何記錄,請改進查詢條件</td></tr>";
$("#ajaxtable").append(html);
}
else {
alert(data.info);
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("網(wǎng)絡(luò)繁忙,請刷新頁面!");
}
});
}
三、Avalonjs改善代碼拼接
Angularjs用得也比較多,但是太龐大了,所有找到一個比較適合一般開發(fā)的Avalonjs。
我之前在博問里問過這樣一個問題:有沒有jquery數(shù)據(jù)雙向綁定插件,有臟檢查的。只是和大家探討,我見過一個DataSet js插件,所有的數(shù)據(jù)以json的形式綁定的DataSet,DataSet本身實現(xiàn)臟檢查,其余控件都綁定相應(yīng)的DataSet的某個屬性。只要某個綁定控件值發(fā)生改變,就可以從DataSet中獲取僅僅改變的數(shù)據(jù)(而不是整個json)。回答的幾乎是Angularjs。其與的也都是基本的雙向綁定,所以臟檢查還是要自己實現(xiàn)。
使用Avalonjs首先引入js文件,然后定義controller
如:查詢

<div ms-controller="avalonCtrl">
<div style="margin: 8px 0px;">
<input type="text" class="form-control" ms-duplex="key" />
<input type="button" value="查詢" 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>部門</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ò)繁忙,請刷新頁面!");
}
});
}
});
最后回到臟檢查:如果把這個改進成可編輯的表格,怎么去監(jiān)聽哪些行被修改,保存的時候不應(yīng)該提交整個表格數(shù)據(jù),而應(yīng)該提交修改的行數(shù)據(jù)?

本文代碼:下載
本文地址:http://www.cnblogs.com/liuxiaobo93/p/5593393.html
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 用 Net 命令使局域網(wǎng)文件批量同步更新
- asp.net 刪除,更新數(shù)據(jù)庫方法
- asp.net 使用駐留在頁面中的Cache緩存常用可定時更新的數(shù)據(jù)
- asp.net 用戶在線退出更新實現(xiàn)代碼
- Asp.net生成Excel文件并下載(更新:解決使用迅雷下載頁面而不是文件的問題)
- sql server中批量插入與更新兩種解決方案分享(asp.net)
- asp.net中g(shù)ridview的查詢、分頁、編輯更新、刪除的實例代碼
- c#使用DotNetZip封裝類操作zip文件(創(chuàng)建/讀取/更新)實例
- 頁面間隔半秒鐘更新時間 Asp.net使用Comet開發(fā)http長連接示例分享
相關(guān)文章
基于?.NET?6?的ASP.NET?Core啟動地址配置方法及優(yōu)先級順序
這篇文章主要介紹了ASP.NET?Core啟動地址配置方法及優(yōu)先級順序,?.NET?6?使用了最小?WEB?API,?配置方式已經(jīng)部分發(fā)生了變化,下面文章我們來看看具體的方法,需要的小伙伴可以參考一下2022-03-03
MVC 5 第一章 創(chuàng)建MVC 5 web應(yīng)用程序
本章將講述一些構(gòu)建ASP.NET MVC 5 web application的一些基礎(chǔ)知識, 通過本章學(xué)習(xí),你應(yīng)該能夠掌握到構(gòu)建MVC 5應(yīng)用程序的基本步驟,并且通過展示一個完整的MVC 5 hello world應(yīng)用程序了解MVC 5應(yīng)用程序所帶來的用戶體驗。2014-06-06
通過ASP.net實現(xiàn)flash對數(shù)據(jù)庫的訪問
近來網(wǎng)站需要在flash中提取數(shù)據(jù)庫中的數(shù)據(jù),從網(wǎng)上找了一點資料,今天下午在自己的機器上實現(xiàn)了一下,還是比較簡單的。2009-08-08
docker部署Asp.net core應(yīng)用的完整步驟
這篇文章主要給大家介紹了關(guān)于docker部署Asp.net core應(yīng)用的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Asp.net core具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
ASP.NET 5中使用AzureAD實現(xiàn)單點登錄
本文給大家介紹的是在ASP.NET 5中使用AzureAD實現(xiàn)單點登錄的方法和示例,有需要的小伙伴可以參考下。2015-07-07
基于ASP.NET的lucene.net全文搜索實現(xiàn)步驟
使用lucene.net搜索分為兩個部分,首先是創(chuàng)建索引,創(chuàng)建文本內(nèi)容的索引,其次是根據(jù)創(chuàng)建的索引進行搜索, 感興趣的朋友可以了解下或許對你有所幫助2013-02-02

