ASPx中使用内嵌代码设置CardViewTextColumn的ReadOnly属性不生效问题
问题原因
你用的服务端控件属性绑定语法错误,<% %> 是普通嵌入式代码块,只能输出内容到页面渲染流,不能直接给服务端控件的属性赋值。
解决方案1:使用数据绑定表达式
- 首先修正前端标记的表达式语法,用数据绑定标记
<%# %>替代原有的<% %>,isAdmin()方法返回bool类型即可:
<dx:CardViewTextColumn FieldName="Role" ReadOnly="<%# isAdmin() %>" />
- 确保
isAdmin()方法的访问修饰符为protected或public,不能是私有方法,否则前台无法访问。 - 必须在页面生命周期中触发数据绑定,例如在Page_Load中调用卡片视图的
DataBind()方法:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // 原有CardView绑定数据源的逻辑 CardView1.DataBind(); // 这步必须执行,否则绑定表达式不会生效 } } protected bool isAdmin() { // 替换为你自己的管理员身份判断逻辑 return HttpContext.Current.User.IsInRole("Administrator"); }
解决方案2:后台代码直接赋值
如果不想依赖数据绑定,也可以直接在后台代码中找到对应列设置ReadOnly属性:
protected void CardView1_Init(object sender, EventArgs e) { var roleColumn = CardView1.Columns["Role"] as CardViewTextColumn; if (roleColumn != null) { roleColumn.ReadOnly = isAdmin(); } }
内容的提问来源于stack exchange,提问作者AlessandroF
相关产品推荐
相关产品推荐

