拡張方法のAsp.Net編
拡張方法といえば、ブログ園の鶴沖天は、拡張方法に関する文章がほぼ全体の半分を占めており、優秀な作品も少なくない.私はAspにいます.Net開発期間中も多くの拡張方法をまとめ、皆さんと共有しています.
1. GridViewのプライマリ・キー値を取得するには、次の手順に従います.
例:
2. GridViewの行番号を取得するには、次の手順に従います.
例:
3. 指定したIDのコントロールを検索し、指定したタイプに変換します.
例:
4. 指定したタイプのコントロールを検索します.
例:
備考:実際の開発では、すべてのRequiredFieldValidatorコントロールを見つけ、エラー情報とプロンプト情報を統一的に設定する良いアプリケーションシーンがあります.
もちろん、FindControlsにActionパラメータを追加するのは良い方法であるべきで、以上の文を直接書くことができます.
5. このページがAjaxを使用しているかどうかを判断します(実はScriptManagerを使用しているかどうかを判断します):
例:
6.UpdatePanel呼び出しjavascript表示情報:
例:
alertをきれいなヒントボックスに変えるとperfectになります.
まとめ:実際のプロジェクトでは、このいくつかの拡張方法だけでなく、典型的なコミュニケーションを送っているだけで、他のものは少し複雑で、あまり使われていません.これらの拡張方法があれば、プロジェクトの多くの重複コードを除去することができます.より良い提案を歓迎します.最後に少し純粋なコードの味がしますが、実はこれらの方法はすべて入門級で、どれも読めないはずがなくて、ここでくどくど言わないでください.
0
0
来源:ブログ園
1. GridViewのプライマリ・キー値を取得するには、次の手順に従います.
public static T GetKey<T>(this GridView grid, int rowIndex)
{
T key = (T)grid.DataKeys[rowIndex].Value;
return key;
}
例:
protected void gvMaster_RowEditing(object sender, GridViewEditEventArgs e)
{
string key = gvMaster.GetKey<string>(e.NewEditIndex);
}
2. GridViewの行番号を取得するには、次の手順に従います.
public static int GetRowIndex(this GridViewCommandEventArgs e)
{
GridViewRow gvrow = (GridViewRow)(((Control)e.CommandSource).NamingContainer);
return gvrow.RowIndex;
}
例:
protected void gvMaster_RowCommand(object sender, GridViewCommandEventArgs e)
{
int rowIndex = e.GetRowIndex();
}
3. 指定したIDのコントロールを検索し、指定したタイプに変換します.
public static T FindControl<T>(this Control control, string id) where T : class
{
Control c = control.FindControl(id);
return (c as T);
}
例:
// ID lblTest Label
this.FindControl("lblTest");
// Panel ID lblTest Label
Panel1.FindControl("lblTest");
4. 指定したタイプのコントロールを検索します.
public static List<T> FindControls<T>(this Control control) where T : Control
{
Action<Control, List<T>> findhelper =null;
findhelper= (ctl, list) =>
{
if (ctl is T)
{
list.Add((T)ctl);
}
if (ctl.HasControls())
{
foreach (Control c in ctl.Controls)
{
findhelper(c, list);
}
}
};
List<T> controls =new List<T>();
findhelper(control, controls);
return controls;
}
例:
// Label
this.FindControls();
// Panel Label
Panel1.FindControls();
備考:実際の開発では、すべてのRequiredFieldValidatorコントロールを見つけ、エラー情報とプロンプト情報を統一的に設定する良いアプリケーションシーンがあります.
var rs = this.FindControls<RequiredFieldValidator>();
foreach (var r in rs)
{
r.ErrorMessage = "*";
r.ToolTip = " ";
}
もちろん、FindControlsにActionパラメータを追加するのは良い方法であるべきで、以上の文を直接書くことができます.
var rs = this.FindControls<RequiredFieldValidator>(r =>
{
r.ErrorMessage = "*";
r.ToolTip = " ";
});
5. このページがAjaxを使用しているかどうかを判断します(実はScriptManagerを使用しているかどうかを判断します):
public static bool IsAjaxPage(this Page page)
{
return (ScriptManager.GetCurrent(page) != null);
}
public static bool IsAjaxPage(this Control control)
{
return (ScriptManager.GetCurrent(control.Page) != null);
}
例:
if (this.IsAjaxPage())
{
do sth about ajax
}
6.UpdatePanel呼び出しjavascript表示情報:
public static void Alert(this UpdatePanel panel, string message)
{
if (message.Length > 50)
{
message = message.Substring(0, 50);// 50
}
// javascript
message = Utility.ReplaceStrToScript(message);
ScriptManager.RegisterClientScriptBlock(panel, panel.GetType(), "Message",
string.Format( " alert('{0}'); ", message) , true);
}
例:
udpHeader.Alert("Hello,I'm Bruce!");// :udpHeader UpdatePanel
public static class MyExtensions
{
public static Color ToColor(this string colorName)
{
if (colorName.StartsWith("#"))
colorName = colorName.Replace("#", string.Empty);
int v = int.Parse(colorName, System.Globalization.NumberStyles.HexNumber);
return new Color()
{
A = Convert.ToByte((v >> 24) & 255),
R = Convert.ToByte((v >> 16) & 255),
G = Convert.ToByte((v >> 8) & 255),
B = Convert.ToByte((v >> 0) & 255)
};
}
}
: rectangle1.Fill = new SolidColorBrush("#FFF5F5F5".ToColor());
alertをきれいなヒントボックスに変えるとperfectになります.
まとめ:実際のプロジェクトでは、このいくつかの拡張方法だけでなく、典型的なコミュニケーションを送っているだけで、他のものは少し複雑で、あまり使われていません.これらの拡張方法があれば、プロジェクトの多くの重複コードを除去することができます.より良い提案を歓迎します.最後に少し純粋なコードの味がしますが、実はこれらの方法はすべて入門級で、どれも読めないはずがなくて、ここでくどくど言わないでください.
0
0
来源:ブログ園