五、多个控件对应同一个实体属性
在上面的例子中,我们的控件的ID和对应的实体属性是相同的。但是在很多情况下,相同的页面上有不止一个控件映射到实体的同一个属性上。而控件ID的唯一性决定了我们不能为它们起相同的ID。在这种情况下,我们采用“基于后缀”的映射。也就是为,在为控件进行命名的时候,通过“实体属性名+后缀”形式来指定。
如果你仔细看了DataBinder的定义,不论是实例方法BindData接受Control类型参数的),还是静态方法BuildBindingMappings,都具有一个缺省参数suffix,这就是为这种情况设计的。在默认的情况下,这个参数的值为空字符串,所以我们需要控件和实体属性具有相同的名称。如果控件是基于“实体属性名+后缀”来命名的,就需要显式指定这个参数了。为了演示这种情况,我们将例子中的所有需要绑定的空间ID加上一个“_Xyz”字符作为后缀。
- <table>
- <tr>
- <td style="width:20%;text-align:right">ID:</td>
- <td><asp:Label ID="ID_Xyz" runat="server"></asp:Label></td>
- </tr>
- <tr>
- <td style="width:20%;text-align:right">First Name:</td>
- <td><asp:TextBox ID="FirstName_Xyz" runat="server"></asp:TextBox></td>
- </tr>
- <tr>
- <td style="width:20%;text-align:right">Last Name:</td>
- <td><asp:TextBox ID="LastName_Xyz" runat="server"></asp:TextBox></td>
- </tr>
- <tr>
- <td style="width:20%;text-align:right">Gender:</td>
- <td>
- <asp:RadioButtonList ID="Gender_Xyz" runat="server" RepeatDirection="Horizontal">
- <asp:ListItem Text="Male" Value = "Male" />
- <asp:ListItem Text="Female" Value = "Female" />
- </asp:RadioButtonList>
- </td>
- </tr>
- <tr>
- <td style="width:20%;text-align:right">Age:</td>
- <td><asp:TextBox ID="Age_Xyz" runat="server"></asp:TextBox></td>
- </tr>
- <tr>
- <td style="width:20%;text-align:right">Birthday:</td>
- <td><asp:TextBox ID="Birthday_Xyz" runat="server" Width="313px"></asp:TextBox></td>
- </tr>
- <tr>
- <td style="width:20%;text-align:right">Is VIP:</td>
- <td><asp:CheckBox ID="IsVip_Xyz" runat="server"></asp:CheckBox></td>
- </tr>
- <tr>
- <td colspan="2" align="center">
- <asp:Button ID="ButtonBind" runat="server" Text="Bind" onclick="ButtonBind_Click" />
- </td>
- </tr>
- /table>
如果采用指定容器控件进行直接绑定的话,就可以这样编程:
- protected void ButtonBind_Click(object sender, EventArgs e)
- {
- var customer = new Customer
- {
- ID = Guid.NewGuid().ToString(),
- FirstName = "Zhang",
- LastName = "San",
- Age = 30,
- Gender = "Male",
- BirthDay = new DateTime(1981, 1, 1),
- IsVip = true
- };
- this.DataBinder.BindData(customer, this, "_Xyz");
如果通过预先创建的BindingMapping集合进行数据绑定,那么代码将是这样:
- protected void ButtonBind_Click(object sender, EventArgs e)
- {
- var customer = new Customer
- {
- ID = Guid.NewGuid().ToString(),
- FirstName = "Zhang",
- LastName = "San",
- Age = 30,
- Gender = "Male",
- BirthDay = new DateTime(1981, 1, 1),
- IsVip = true
- };
- var bindingMappings = Artech.DataBinding.DataBinder.BuildBindingMappings(typeof(Customer), this, "_Xyz");
- this.DataBinder.BindData(customer, bindingMappings);
- }
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。