zoukankan      html  css  js  c++  java
  • 扩展方法 之 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);
             }

    示例:

     //从整个页面里查找IDlblTestLabel
    this.FindControl<Label>("lblTest");
    //Panel里查找IDlblTestLabel
    Panel1.FindControl<Label>("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<Label>();
    //Panel里查找所有Label
    Panel1.FindControls<Label>();


    备注:
    在实际开发中有个不错的应用场景——找到所有的RequiredFieldValidator
    控件并统一设置其错误信息和提示信息:

                 var rs = this.FindControls<RequiredFieldValidator>();
                 
    foreach (var r in
     rs)
                  
    {
                     r.ErrorMessage 
    = "*"
    ;
                     r.ToolTip 
    = "不能为空"
    ;
                 }

    当然,如果在FindControls中增加一个Action<T> 参数应该是个不错的方案,这样以上语句就可以直接写成:

                 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(050);//最多显示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了。


    总结
    实际项目中远不止这几个扩展方法,只是比较典型就发上来交流交流,其他的稍微有点复杂而且不经常用到。
    有了这些扩展方法,就可以去除项目中很多重复性代码,欢迎大家提出更好的建议。
    末了发觉有点纯代码的味道,但实在这些方法都是入门级,也应该没哪一个是看不懂的,也就不在这里一一罗嗦。

  • 相关阅读:
    QT visual stuido 集成插件不能打开ui文件的解决方法(去掉xml的UTF8标记)
    就异地协作办公来说, 360的体验完爆他们——360书生企业云盘 来了
    MVC 4
    Mvc的多层架构
    代码生成器
    js理解
    我(webabcd)的文章索引
    多个视图结果显示于一个共用预览视图内
    .NET源码
    Using Ninject in a Web Application
  • 原文地址:https://www.cnblogs.com/myssh/p/1574331.html
Copyright © 2011-2022 走看看