文本框数据绑定

Moo*_*Moo 7 asp.net data-binding webforms

当你使用WebForms时,你最终会在页面上出现很多文本框,这意味着你也倾向于使用来回的数据绑定代码:

tbMyTextBox.Text = MyViewObjectDataClass.MyStringProperty;
Run Code Online (Sandbox Code Playgroud)

MyViewObjectDataClass.MyStringProperty = tbMyTextBox.Text;
Run Code Online (Sandbox Code Playgroud)

这可能会非常重复......

我可以使用AutoMapper自动化我的视图对象和我的域对象之间的映射,这引出了我的问题......

有没有办法让ASP.Net表单元素自动查看对象?没有诉诸上述几十行?

是的,我可以切换到MVC,但这不是许多正在进行的项目的选择.

Meg*_*net 6

在ASPX文件中这种方法怎么样:

<asp:TextBox ID="TextBox1" runat="server" Text='<%#MyViewObjectDataClass.Name %>'></asp:TextBox>
Run Code Online (Sandbox Code Playgroud)

但是我们仍然需要添加语句:

  protected void Page_Load(object sender, EventArgs e)
  {
         if (!Page.IsPostBack)
         {
          this.DataBind();
         }
  }
Run Code Online (Sandbox Code Playgroud)

另一种方法使用这样的自定义控件:

            public class NullPanel : Panel
            {
                private bool _autoBind = true;

                public override void RenderBeginTag(System.Web.UI.HtmlTextWriter writer)
                {
                    //base.RenderBeginTag(writer);
                }

                public override void RenderEndTag(System.Web.UI.HtmlTextWriter writer)
                {
                    //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);
                    //Set Visible property as true that intent to rise OnPreRender method
                    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);
                }
            }
Run Code Online (Sandbox Code Playgroud)

然后在ASPX文件中使用它:

 <asp:NullPanel ID="panelFenInfo" runat="server" 
         Visible='<%#this.IsEditMode%>' >
   <asp:TextBox ID="tbName" runat="server" Text='<%#this.MyViewObjectDataClass.Name %>'></asp:TextBox>
 <asp:NullPanel>
 <asp:NullPanel ID="panelInfo" runat="server" 
         Visible='<%#!Page.IsPostBack%>' >
   <asp:TextBox ID="tbCompany" runat="server" Text='<%#this.MyViewObjectDataClass.Name %>'></asp:TextBox>
 <asp:NullPanel>
Run Code Online (Sandbox Code Playgroud)