使用runat =“server”将输入设置为基于代码隐藏属性禁用

时间:2015-08-27 15:21:14

标签: c# asp.net webforms

我正在尝试停用input runat="server"属性。这应该基于属性背后的代码。这是我在新的.NET 3.5 Web窗体项目中对场景的最小重复:

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

1 个答案:

答案 0 :(得分:2)

所以,请注意以下几点:

  1. <%#仅适用于数据绑定上下文,所以不是你的情况
  2. <%=相当于Response.Write,所以再次不是你的情况,因为它无法操纵服务器端控件属性
  3. 在调用Load之前处理标记,因此您的初始化可能会迟到。
  4. 你最好的办法就是在代码背后禁用 - 这是设置非数据绑定控件属性的唯一好方法。您可以直接在设置器中执行此操作:

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

    毕竟,你可能不需要吸气剂和私人领域。