• 如此自动绑定数据到WebUI


      把数据绑定到控件,不知道大家用哪种方法?
      很早之前,我一般在aspx中放置控件,在后台的代码中用代码直接给相应的控件设置属性的值。这样的方法优点是灵活,可以依据业务逻辑,灵活的设置控件的Text以及Visible。示例如下:  
                <table>
                    
    <tr>
                        
    <td>
                            用户名
                        
    </td>
                        
    <td>
                            
    <asp:TextBox ID="tbName" runat="server" ></asp:TextBox>
                        
    </td>
                    
    </tr>
                
    </table>
    然后后台里写代码:
        protected User OperData
        
    {
            
    get;
            
    set;
        }


        
    protected void Page_Load(object sender, EventArgs e)
        
    {
            
    if (!Page.IsPostBack)
            
    {
                
    this.tbName.Text = OperData.Name;
            }

        }

      不久之前,我发现在写好多字段的如果都这样写的话,会很累的,虽然效率会很高。所以我尝试采用如下的方式:
      尽可以的避免在代码中直接写来给控件属性设置值,而通过前台的绑定来实现,如:
                            <asp:TextBox ID="TextBox1" runat="server" Text='<%#OperData.Name %>'></asp:TextBox>
    不过,这样的话,在后台也应该至少有一句绑定操作,像这样:
        protected void Page_Load(object sender, EventArgs e)
        
    {
            
    if (!Page.IsPostBack)
            
    {
                
    this.DataBind();
            }

        }

    虽然绑定上了,但这里有一个问题,我们的页面上的控件,不是都是在 !Page.IsPostBack这个条件的时候要绑定,也许还要有别的要求。还有,既然已经Page.IsPostBack也是条件,我们要是不用在后台代码里写this.DataBind不是更好吗?
      其实,说难也不难,我们来实现一个控件,这个控件用来自动绑定,且分条件的绑定。下面看下代码:
    namespace Iyond.Web.UI.WebControls
    {
        
    public class NullPanel : Panel
        
    {
            
    private bool _autoBind = true;

            
    public override void RenderBeginTag(System.Web.UI.HtmlTextWriter writer)
            
    {
                
    //因为NULL吗,所以什么也不输出
                
    //base.RenderBeginTag(writer);
            }


            
    public override void RenderEndTag(System.Web.UI.HtmlTextWriter writer)
            
    {
                
    //因为NULL吗,所以什么也不输出
                
    //base.RenderEndTag(writer);
            }


            
    protected override System.Web.UI.HtmlTextWriterTag TagKey
            
    {
                
    get
                
    {
                    
    return System.Web.UI.HtmlTextWriterTag.Unknown;
                }

            }


            [DefaultValue(
    true)]
            
    public bool AutoBind
            
    {
                
    get
                
    {
                    
    return _autoBind;
                }

                
    set
                
    {
                    _autoBind 
    = value;
                }

            }


            
    protected override void OnLoad(EventArgs e)
            
    {
                
    base.OnLoad(e);
                
    //重置显示属性,好引发 OnPreRender
                this.Visible = true;
            }


            
    protected override void DataBindChildren()
            
    {
                
    //分条件绑定子控件,条件就是:
                if (this.Visible && this.AutoBind)
                
    {
                    
    base.DataBindChildren();
                }

            }


            
    protected override void OnPreRender(EventArgs e)
            
    {
                
    //在这里,我们要给数据绑定数据,不知道这个位置是不是最好
                if (this.AutoBind)
                
    {
                    
    this.DataBind();
                }


                
    base.OnPreRender(e);
            }

        }

    }

      有了上面这个控件,我现在可以像下面一样写代码:
    <asp:NullPanel ID="panelFenInfo" runat="server" 
            Visible
    ='<%#this.IsEditMode%>' >
      
    <asp:TextBox ID="tbName" runat="server" Text='<%#this.OperData.Name %>'></asp:TextBox>
    <asp:NullPanel>
    <asp:NullPanel ID="panelInfo" runat="server" 
            Visible
    ='<%#!Page.IsPostBack%>' >
      
    <asp:TextBox ID="tbCompany" runat="server" Text='<%#this.OperData.Name %>'></asp:TextBox>
    <asp:NullPanel>
    后台代码,这时就不用写了。
      写到这里,不知道大家看明白没有,我的文笔可真差,希望大家多在评论中指出。
  • 相关阅读:
    Entity Framework Core 2.0 新特性
    asp.net core部署时自定义监听端口,提高部署的灵活性
    asp.net core使用jexus部署在linux无法正确 获取远程ip的解决办法
    使用xshell连接服务器,数字键盘无法使用解决办法
    使用Jexus 5.8.2在Centos下部署运行Asp.net core
    【DevOps】DevOps成功的八大炫酷工具
    【Network】Calico, Flannel, Weave and Docker Overlay Network 各种网络模型之间的区别
    【Network】UDP 大包怎么发? MTU怎么设置?
    【Network】高性能 UDP 应该怎么做?
    【Network】golang 容器项目 flannel/UDP相关资料
  • 原文地址:https://www.cnblogs.com/evlon/p/705828.html
Copyright © 2020-2023  润新知