当前位置导航:炫浪网>>网络学院>>网页制作>>ASP.NET教程

扩展方法 之 Asp.Net篇

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的Labelthis.FindControl("lblTest");//从Panel里查找ID为lblTest的LabelPanel1.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;
  }
  示例:
  
  //从整个页面里查找所有Labelthis.FindControls();//从Panel里查找所有LabelPanel1.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 类型把 alert 换成漂亮的提示框就perfect了。
  
  
  总结:
  实际项目中远不止这几个扩展方法,只是比较典型就发上来交流交流,其他的稍微有点复杂而且不经常用到。
  有了这些扩展方法,就可以去除项目中很多重复性代码,欢迎大家提出更好的建议。
  末了发觉有点纯代码的味道,但实在这些方法都是入门级,也应该没哪一个是看不懂的,也就不在这里一一罗嗦。
相关内容
赞助商链接