2009-03-03 42 views
1

下面是我嘗試實現的一個簡化示例;使用<%#isChecked%>表達式設置複選框

<asp:CheckBox runat="server" Checked="<%# this.isChecked %>" id="myCheckBox" /> 

然後在我的代碼後面;

public partial class _Default : System.Web.UI.Page 
{ 
    bool _isChecked = true; 

    public string isChecked 
    { 
     get 
     { 
      return _isChecked.ToString(); 
     } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 
} 

我知道,在這種情況下,我可以簡單地使用myCheckBox.Checked =真實的,但我只是用這個例子說明目的。真正的控制是一個自定義的控制,但我沒有運氣讓這種方法工作。它似乎忽略了我提供的價值。

以這種方式使用<%#this.isChecked%>有效嗎?

編輯:

對不起,我有急事寫這個,並認識到它不是真正清楚,我打算「複選框」到僅僅是一個例子。我只是試圖將服務器端布爾變成ASP控件的任何特定屬性,而不一定是複選框控件的「checked」屬性。

編輯2: 更新我的例子使用字符串屬性,而不是布爾域,但它現在報告在我的ASPX文件下面的錯誤;

無法轉換類型 '字符串' 到 '布爾'

回答

3

如果提供

checked="anything" 

,將檢查(以HTML)。您需要省略checked選項以使其不被檢查,所以這不起作用。


編輯的問題後,這是我更新的答案:

我不會嘗試設置屬性的aspx頁面,而我會用ID,並做到在代碼。

例如。

<asp:Control ID="uxMyControl" runat="server" attributes="other"... /> 

後面的代碼:

private Boolean mypropery = false; 

Page_Load(object sender, EventArgs e) 
{ 
    this.myproperty = true; 
    uxMyControl.attributes = myproperty; 
} 
+0

這是我最初完成的工作,但是因爲控件在Page_Load之前爲父頁面執行而被渲染,所以該屬性被設置得太晚了,並且該控件根據屬性的默認值而不是一個在Page_Load中設置。 – 2009-03-03 16:15:38

+0

該控件不應該完全呈現在這一點上,但是您是否嘗試過編輯該控件的Page_load?或者使用Page_PreInit? – cjk 2009-03-03 16:32:08

2

沒有,因爲你返回一個布爾值,而不是字符串(類型轉換的問題),你需要一個屬性,而不是一個字段的數據綁定表達式的工作,有些瀏覽器將無法正確地使用「真/假」字樣呈現您的複選框。相反,他們希望看到checked="checked"檢查框或沒有任何東西來取消它。

根據你的編輯,我懷疑你有代碼試圖設置isChecked布爾值。代碼現在失敗了,而isChecked名稱指向一個字符串屬性。更新它以設置_isChecked。

相關問題