几个 ASP.NET 小技巧
生活随笔
收集整理的這篇文章主要介紹了
几个 ASP.NET 小技巧
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. ASP.NET AJAX 中,如何用 JavaScript 調用服務器端的方法?
這里不是指調用簡單的 PageMethod,因為靜態方法是不能操作當前頁面的控件的,所以靜態的 PageMethod 作用就跟普通的 WebService 一樣,比較局限。
那么,調用一般的服務器端方法,其實就是發起一個異步回調。最簡單的實現辦法,是通過 UpdatePanel 來做。
首先定義一個隱藏的 LinkButton,在其處理事件中,去調用我們要執行的操作:
<asp:LinkButton?ID="linkUpdatePosts"?runat="server"?style="display:'none';"?OnClick="linkUpdatePosts_Clicked"?/>
????//?刷新帖子列表(供客戶端?js?調用)
????protected?void?linkUpdatePosts_Clicked(object?sender,?EventArgs?e)
????{
????????LoadPosts();
????}
然后 JavaScript 中就可以定義函數來觸發這個 LinkButton 的回發:
????//?刷新帖子列表
????function?refreshPosts()?{
????????__doPostBack('<%=?linkUpdatePosts.UniqueID?%>',?'');
????}
// 刷新帖子列表
??? function refreshPosts() {
??????? __doPostBack('<%= linkUpdatePosts.ClientID %>'.split('_').join('$'), '');
??? }這里注意 split('_').join('$') 的用法,是因為作為 __doPostBack 參數的控件標志符是用 $ 分隔的,而 ClientID 是用 _ 分隔,要在兩者之間進行下轉換。
2. 如何獲取 GridView 編輯狀態下單元格里的值?
還在使用這樣的代碼嗎?
var?txtName?=?grid1.Rows[e.RowIndex].Cells[0].FindControl("txtName")?as?TextBox;
if?(txtName?!=?null)
{
????//?讀取值
????//?
}
其實這些工作(在單元格中查找控件,并嘗試獲取其中的值)已經被封裝了。現在,只要調用 ExtractValuesFromCell 方法即可。
而該方法也被很多種列類型所支持:
DataControlField, BoundField, AutoGeneratedField, CheckBoxField, ImageField, TemplateField, DynamicField
你可以在 GridView 的 RowUpdating, RowDeleting 等事件中使用它。利用該方法,可以將值提取到所需的字典里去,然后再從字典中讀取。這些字典包括:e.Keys, e.NewValues, e.OldValues 等。
一小段例子代碼:
????//?更新
????protected?void?grid1_RowUpdating(object?sender,?GridViewUpdateEventArgs?e)
????{
????????var?row?=?grid1.Rows[e.RowIndex];
????????//?提取?Id?字段的值
????????grid1.Columns[0].ExtractValuesFromCell(
????????????e.Keys,
????????????row.Cells[0]?as?DataControlFieldCell,
????????????DataControlRowState.Edit,
????????????true?/*?include?readonly?*/);
????????//?提取?Name?字段的值
????????grid1.Columns[1].ExtractValuesFromCell(
????????????e.NewValues,
????????????row.Cells[1]?as?DataControlFieldCell,
????????????DataControlRowState.Edit,
????????????true?/*?include?readonly?*/);
????????var?id?=?int.Parse(e.Keys["id"].ToString());
????????var?name?=?(string)?e.NewValues["name"];
????????//?執行相關的數據庫更新操作
????????//?
????}
這樣,在大多數場合我們可以盡可能多的使用 BoundField,并且也能正確讀取到其編輯時的值,省下自定義 TemplateField 的一堆代碼了。
這里不是指調用簡單的 PageMethod,因為靜態方法是不能操作當前頁面的控件的,所以靜態的 PageMethod 作用就跟普通的 WebService 一樣,比較局限。
那么,調用一般的服務器端方法,其實就是發起一個異步回調。最簡單的實現辦法,是通過 UpdatePanel 來做。
首先定義一個隱藏的 LinkButton,在其處理事件中,去調用我們要執行的操作:
<asp:LinkButton?ID="linkUpdatePosts"?runat="server"?style="display:'none';"?OnClick="linkUpdatePosts_Clicked"?/>
????//?刷新帖子列表(供客戶端?js?調用)
????protected?void?linkUpdatePosts_Clicked(object?sender,?EventArgs?e)
????{
????????LoadPosts();
????}
然后 JavaScript 中就可以定義函數來觸發這個 LinkButton 的回發:
????//?刷新帖子列表
????function?refreshPosts()?{
????????__doPostBack('<%=?linkUpdatePosts.UniqueID?%>',?'');
????}
// 刷新帖子列表
??? function refreshPosts() {
??????? __doPostBack('<%= linkUpdatePosts.ClientID %>'.split('_').join('$'), '');
??? }這里注意 split('_').join('$') 的用法,是因為作為 __doPostBack 參數的控件標志符是用 $ 分隔的,而 ClientID 是用 _ 分隔,要在兩者之間進行下轉換。
2. 如何獲取 GridView 編輯狀態下單元格里的值?
還在使用這樣的代碼嗎?
var?txtName?=?grid1.Rows[e.RowIndex].Cells[0].FindControl("txtName")?as?TextBox;
if?(txtName?!=?null)
{
????//?讀取值
????//?
}
其實這些工作(在單元格中查找控件,并嘗試獲取其中的值)已經被封裝了。現在,只要調用 ExtractValuesFromCell 方法即可。
而該方法也被很多種列類型所支持:
DataControlField, BoundField, AutoGeneratedField, CheckBoxField, ImageField, TemplateField, DynamicField
你可以在 GridView 的 RowUpdating, RowDeleting 等事件中使用它。利用該方法,可以將值提取到所需的字典里去,然后再從字典中讀取。這些字典包括:e.Keys, e.NewValues, e.OldValues 等。
一小段例子代碼:
????//?更新
????protected?void?grid1_RowUpdating(object?sender,?GridViewUpdateEventArgs?e)
????{
????????var?row?=?grid1.Rows[e.RowIndex];
????????//?提取?Id?字段的值
????????grid1.Columns[0].ExtractValuesFromCell(
????????????e.Keys,
????????????row.Cells[0]?as?DataControlFieldCell,
????????????DataControlRowState.Edit,
????????????true?/*?include?readonly?*/);
????????//?提取?Name?字段的值
????????grid1.Columns[1].ExtractValuesFromCell(
????????????e.NewValues,
????????????row.Cells[1]?as?DataControlFieldCell,
????????????DataControlRowState.Edit,
????????????true?/*?include?readonly?*/);
????????var?id?=?int.Parse(e.Keys["id"].ToString());
????????var?name?=?(string)?e.NewValues["name"];
????????//?執行相關的數據庫更新操作
????????//?
????}
這樣,在大多數場合我們可以盡可能多的使用 BoundField,并且也能正確讀取到其編輯時的值,省下自定義 TemplateField 的一堆代碼了。
轉載于:https://www.cnblogs.com/RChen/archive/2008/09/23/1296721.html
總結
以上是生活随笔為你收集整理的几个 ASP.NET 小技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从一个C程序学“逐步求精”的分析方法
- 下一篇: 人家可是见过大世面的