2015-08-27 29 views
1

我試圖禁用inputrunat="server"屬性。這應該基於屬性背後的代碼。這裏是我的方案的一個新的.NET 3.5 Web窗體項目的精簡攝製:根據屬性後面的代碼將runat =「server」的輸入設置爲禁用

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

+0

爲什麼不在'Page_Load'處理程序中執行'myinput.Disabled = IsReadOnly'?請注意,您不能在'runat =「server」'元素中使用'<%='。 – Luaan

+0

這是我目前使用的解決方法。然而,因爲aspx已經有很多其他類似的東西,所以我想把它保留在那裏(或者,當我幾個月後回到這個視圖時,我可能會對輸入的方式感到迷茫禁用)。 – Jeroen

回答

2

所以,一對夫婦的事情這裏要注意:

  1. <%#打算只在數據綁定方面的工作,所以沒有你的情況下
  2. <%=相當於Response.Write,所以再沒有你的情況下,它無法操作服務器端控件屬性
  3. 在調用Load之前處理標記,因此您的初始化可能會遲到您想要的。

最好的辦法就是在代碼背後禁用 - 這是設置不受數據綁定控件屬性的唯一好方法。你可以直接在setter中這樣做:

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

而且你可能不需要getter,因此也許不需要私人領域。

+0

猜猜我是如此迷戀MVVM-塗料,我沒有看到我的解決方法是這裏的實際解決方案。 – Jeroen

+0

PS。如果我在我的模型上使用'IsReadOnly'的數據綁定上下文,並且其中'<%#'* * *可用?或者我應該爲此創建一個新的SO問題? – Jeroen

+0

@Jeroen,如果你在數據綁定上下文中,比如在一個網格視圖內,你的輸入控件將在某種模板內,並且在後面的代碼中不可用,只是它們的ID。在這種情況下,Disabled = <%#IsReadOnly%>是一個正確的方法 – Andrei

相關問題