使用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 ?

使用runat="server"设置输入根据代码隐藏属性禁用

这里需要注意几点:

  1. <%#将只在数据绑定上下文中工作,所以不是你的情况
  2. <%=相当于Response.Write,所以再次不是你的情况,因为它不能操纵服务器端控制属性
  3. 标记在Load被调用之前被处理,所以你的初始化可能会延迟。

最好的办法是在后面的代码中禁用这个功能——这是设置非数据绑定控件属性的唯一好方法。你可以直接在setter中设置,像这样:

private bool _isReadOnly;
public bool IsReadOnly
{
    get { return _isReadOnly; }
    set
    {
        myinput.Disabled = value;
        _isReadOnly = value;
    }
}

你可能根本不需要getter和私有字段