利用動態載入模板,配合ajax實現無重新整理操作
關鍵字:DataGrid 動態模板 Ajax
我們使用ajax實現無重新整理介面時,對於DataGrid,Repeater等列表還是比較麻煩的,經過我的嘗試,找出一種比較合理的方法,可以免除對html的加工處理,隨時擷取到資料列表的HTML content,並且列表格式使用模板,更加容易維護,閱讀
原理是將模板寫入使用者控制項,使用LoadTemplate來載入,然後將其賦給DataGrid或Repeater等控制項,綁定後輸出HTML到用戶端
.aspx.cs
[AjaxPro.AjaxMethod]
public string GetListHTML(string old)
{
Repeater rpt = new Repeater();
ITemplate temp = Page.LoadTemplate("webusercontrol1.ascx");
rpt.ItemTemplate = temp;
rpt.DataSource = Albums.GetFolderList(1);
rpt.DataBind();
System.Text.StringBuilder sb = new System.Text.StringBuilder();
System.IO.StringWriter sw = new System.IO.StringWriter(sb);
HtmlTextWriter writer = new HtmlTextWriter(sw);
rpt.RenderControl(writer);
sw.Flush();
writer.Close();
sw.Close();
Response.Write(sb.ToString());
}
webusercontrol1.ascx<%@ Control Language="C#" %>
<%# DataBinder.Eval(((RepeaterItem)Container).DataItem, "folderName")%><br />
上面就是列表的全部代碼, js端只需調用 類名.GetListHTML 即可快速擷取模板化的列表了。
對應DataGrid,可以增加TemplateCollumn等方法來模板化
webusercontrol1.ascx
webusercontrol1.ascx<%@ Control Language="C#" %>
<%# DataBinder.Eval(((DataGridItem)Container).DataItem, "folderName")%><br />
.aspx.cs 部分代碼:
DataGrid DataGrid1 = new DataGrid();
ITemplate temp = Page.LoadTemplate("webusercontrol1.ascx");
TemplateColumn tc = new TemplateColumn();
tc.HeaderText = "Test";
tc.ItemTemplate = temp;
DataGrid1.Columns.Add(tc);
DataGrid1.AutoGenerateColumns = false;
DataGrid1.DataSource = Albums.GetFolderList(1);
DataGrid1.DataMember = "id";
DataGrid1.DataBind();
全文完