asp.net - 文本框数据绑定(bind)

标签 asp.net data-binding webforms

当使用 WebForms 处理内容时,您往往会在页面上出现大量文本框,这意味着您也往往会出现来回的数据绑定(bind)代码:

tbMyTextBox.Text = MyViewObjectDataClass.MyStringProperty;

MyViewObjectDataClass.MyStringProperty = tbMyTextBox.Text;

这可能会变得相当重复......

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

有没有办法让 ASP.Net 表单元素自动查看对象?不用求助于上面的几十行?

是的,我可以切换到 MVC,但这对于许多正在进行的项目来说不是一个选择。

最佳答案

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

<asp:TextBox ID="TextBox1" runat="server" Text='<%#MyViewObjectDataClass.Name %>'></asp:TextBox>

但是我们还需要添加语句:

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

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

            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);
                }
            }

然后在 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>

关于asp.net - 文本框数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6617994/

相关文章:

c# - 使用 c# 使用 xml 文件填充 TreeView

jQuery 是与 Web 表单还是 HTML 表单一起使用?

asp.net - Web 窗体中的对象是否持久存在于内存中?

c# - List<T> 与 BindingList<T> 优点/缺点

.net - 类型 'System.Windows.Data.Binding' 的对象无法转换为类型 'System.String'

javascript - HTML 表单 onSubmit()

c# - .NET 中的 OAuth 2.0 与 Instagram API

javascript - 在asp.net中加载div而不刷新页面

javascript - Knockout 问题,无法使用 'in' 运算符搜索 'length'

c# - 动态添加页脚到 ASP.NET GridView