在.aspx页面上,将服务器控件的属性链接到页面类的属性(其代码隐藏)的最佳方法是什么?我读过的唯一方法是使用数据绑定:
<asp:TextBox ID="txt" runat="server" Text='<%# Me.SomePropOfMine %>' />
然后从代码隐藏中调用Me.txt.DataBind()
或Me.Databind()
。有没有办法单独在.aspx页面上建立这种关系,或者如果你有许多控件要绑定(不绑定整个页面),简化过程?
答案 0 :(得分:5)
您可以Databind()
整个Me
或容器控件(您也可以在所需控件周围添加PlaceHolder
控件)。因为DataBind()
在Child控件上递归递送。
如果您不需要DataBinding,则更好的方法是使用Code Expression Binder
http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx
这允许您使用<%$ Code: Me.Property %>
代替<%# Me.Property %>
。
有关表达式构建器的更多信息,如果您根本不了解它们,请查看此简介: http://www.4guysfromrolla.com/articles/022509-1.aspx
请注意,<%= Me.Property %>
不适用于<asp:TextBox ...
等网页控件......
<强> P.S。强>
Code
表达式构建器的唯一缺点是您没有智能感知。我通常通过在标记内写<%= Me.TestSomething %>
来获取我的智能感知来解决这个问题,然后在完成后用<%=
替换<%$ Code:
。烦人,但如果你不想去DataBind()路线(你不应该导致它可能与你想要做的现有真实数据绑定冲突。相信我,试图让这些工作是地狱),然后这是要走的路。
答案 1 :(得分:3)
有两件事:
答案 2 :(得分:0)
如果我真的需要这样做,我会使用CodeExpressionBuilder。
但问题是 - 为什么要在标记中设置属性而不是在代码后面?如果它们是动态的并且与逻辑相关(并且可能是它们),那么即使看起来不方便,你也应该在代码中设置它们 - 这会将逻辑保留在一个地方并将标记保存在其他地方。