使用runat="server"设置输入根据代码隐藏属性禁用
本文关键字:quot 隐藏 代码 属性 设置 runat server 使用 输入 | 更新日期: 2023-09-27 18:10:09
我试图禁用具有runat="server"
属性的input
。这应该基于代码隐藏属性。以下是我在一个新的。net 3.5 Web Forms项目中的场景的最小再现:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.IsReadOnly = true;
}
public bool IsReadOnly { get; set; }
}
<%= IsReadOnly %>
<input value="testing" runat="server" id="myinput" disabled="<%# IsReadOnly %>"/>
输入是而不是呈现为禁用。
我做错了什么?我试过各种方法都没有效果,包括:
-
disabled="<%= IsReadOnly %>"
:即使IsReadOnly = true
也不禁用 -
disabled='<%= IsReadOnly ? "disabled" : "" %>'
:IsReadOnly = false
不工作 -
<%= IsReadOnly ? "disabled='disabled'" : "" %>
在标签内:解析器错误
如何在aspx中禁用基于代码背后属性的input
?
这里需要注意几点:
-
<%#
将只在数据绑定上下文中工作,所以不是你的情况 -
<%=
相当于Response.Write
,所以再次不是你的情况,因为它不能操纵服务器端控制属性 - 标记在
Load
被调用之前被处理,所以你的初始化可能会延迟。
最好的办法是在后面的代码中禁用这个功能——这是设置非数据绑定控件属性的唯一好方法。你可以直接在setter中设置,像这样:
private bool _isReadOnly;
public bool IsReadOnly
{
get { return _isReadOnly; }
set
{
myinput.Disabled = value;
_isReadOnly = value;
}
}
你可能根本不需要getter和私有字段