加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

在不可见的asp.net面板中阻止数据绑定

发布时间:2020-12-15 21:00:37 所属栏目:asp.Net 来源:网络整理
导读:不呈现隐藏(visible =“false”)面板,但是对包含的元素执行数据绑定.为什么这样做?更重要的是,如何避免它? 这是一个烦人的例子: asp:Panel ID="UserPanel" runat="server" visible="%# SelectedUser != null %" %# SelectedUser.Name %/asp:Panel 如果Sel
不呈现隐藏(visible =“false”)面板,但是对包含的元素执行数据绑定.为什么这样做?更重要的是,如何避免它?

这是一个烦人的例子:

<asp:Panel ID="UserPanel" runat="server" visible="<%# SelectedUser != null %>">
    <%# SelectedUser.Name %>
</asp:Panel>

如果SelectedUser为null,则不会呈现该面板,但会评估SelectedUser.Name并生成错误.

我显然可以写<%#SelectedUser!= null? SelectedUser.Name:“”%>但它增加了混乱.

当我知道不需要时,有没有办法简单而优雅地阻止面板内的数据绑定?

Panel控件在这里并不重要,它可以是一个带有runat =“server”的纯HTML元素的占位符.

解决方法

我可能会迟到这一点,但我也觉得这很烦人.

如果我正在渲染一个项目列表,每个项目可能是一个不同的类,我经常需要这个 – 在这种情况下,数据绑定表达式中的属性将在其他类类型的不可见部分中给出错误.你会知道你是否想要这个.

我找到的最佳解决方案如下所述:

http://hermanussen.eu/sitecore/wordpress/2011/04/prevent-nullrefs-when-databinding-with-placeholders/

解决方案是标准PlaceHolder控件的简单覆盖,以在Visible为false时禁止绑定子控件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
namespace Website.Controls
{ 
    public class DataPlaceHolder : PlaceHolder 
    { 
        protected override void DataBindChildren() 
        { 
            if (Visible) 
            { 
                base.DataBindChildren(); 
            } 
        } 
    } 
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读