当使用 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/