能否在.aspx页面使用DataBinding评估ASP.NET控件并实现条件可见性?
如何用DataBinding控制普通ASP.NET控件的可见性
当然可以用DataBinding来实现你说的需求——在普通ASP.NET服务器控件上,通过另一个控件的值来控制当前控件的显示/隐藏,和Repeater里的用法思路一致,只是需要注意一个关键细节:必须手动触发数据绑定操作。
具体实现步骤
编写控件的绑定表达式
直接在控件的Visible属性里用<%# ... %>表达式写判断逻辑,比如你提到的场景:<!-- 用来提供判断条件的控件 --> <asp:TextBox runat="server" ID="OtherTextBox" Text="" /> <!-- 要控制可见性的目标控件 --> <asp:TextBox runat="server" ID="ConditionalText" Text="只有当OtherTextBox为空时显示我" Visible='<%# !string.IsNullOrEmpty(OtherTextBox.Text) %>' />这里的逻辑是:如果
OtherTextBox有值,ConditionalText就隐藏——刚好匹配你“当另一个控件存在值时隐藏当前控件”的需求。触发数据绑定
数据绑定表达式<%# ... %>不会自动执行,必须在后台代码里调用DataBind()方法,才能让ASP.NET解析并执行这个表达式。你可以选择:- 页面级绑定:在
Page_Load里给整个页面触发绑定protected void Page_Load(object sender, EventArgs e) { // 首次加载时绑定,如果需要回发后也更新状态,就去掉!IsPostBack判断 if (!IsPostBack) { this.DataBind(); } } - 控件级绑定:只给目标控件单独绑定,更高效
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ConditionalText.DataBind(); } }
- 页面级绑定:在
额外注意事项
- 回发场景处理:如果用户修改了
OtherTextBox的内容,想要实时更新ConditionalText的可见性,需要在回发后重新触发DataBind。比如可以在OtherTextBox的TextChanged事件里调用绑定:
记得给protected void OtherTextBox_TextChanged(object sender, EventArgs e) { ConditionalText.DataBind(); }OtherTextBox设置AutoPostBack="true"才能触发这个事件。 - 数据源字段的用法:如果你的判断条件不是来自另一个控件,而是来自后台变量或数据库字段,也可以直接用
Eval,和Repeater里的用法一样:
这种情况只要父控件(或页面)触发了DataBind,表达式就会自动解析数据源的值。<asp:TextBox runat="server" ID="ConditionalText" Text="当数据源字段为空时显示" Visible='<%# string.IsNullOrEmpty(Convert.ToString(Eval("YourDataField"))) %>' />
简单来说,普通ASP控件使用DataBinding的逻辑和Repeater里完全一致,核心就是别忘记触发DataBind(),剩下的逻辑写法和你预想的一样就行。
内容的提问来源于stack exchange,提问作者Rani Radcliff
相关产品推荐
相关产品推荐

