2011-05-07 39 views
3

我有一個從數據庫自動填寫的只讀表單。我有幾個有真/假值的字段,並希望它們顯示爲空或檢查的複選框。我可以數據綁定複選框控件並將其禁用,但是它會顯示爲灰色。有沒有一種簡單的方法來改變它,使其顯示在正常的,易於閱讀的大膽但仍然被禁用?如果不是,那麼做到這一點的最好方法是什麼?我應該使用圖像嗎?如何在只讀表單上顯示覆選框(ASP.NET)

+0

謝謝大家! – Sara 2011-05-07 17:46:33

回答

3

有趣的問題!

這裏只有一個問題我可以用圖片來代替正常的複選框看,這就是如何活躍複選框將禁用(基於圖像的)複選框不同。所以,如果你走圖像路線,你可能會想所有複選框。 :)

您可以使用以下jQuery方法(迄今爲止只在Chrome和IE 9中測試過)有效地禁用任何複選框。

$('.readonly:checkbox').click(function(e) { 
    e.preventDefault(); 
}); 

這將使「readonly」類「禁用」任何複選框。

或者,您可以使用JavaScript函數內聯(albiet不推薦使用,因爲它會增加混亂和混淆):

<input type="checkbox" onclick="event.preventDefault();" /> 

你會用的原因「的preventDefault()」而不是「返回false」是因爲返回false會停止傳播。這意味着您的點擊事件不會冒泡到父元素。這可能會導致其他代碼出現問題......但這不太可能。

此外,像巴拉R提到的,你不能依靠這些限制來工作。你的服務器端代碼應該知道這些值是隻讀的,並且不要更新它們。

這裏的jsfiddle例如:http://jsfiddle.net/xixionia/3rXCB/

我希望這是有幫助的! :)

1

你可以用javascript做這樣的事情,並將它用於複選框的onclick處理程序。

jsFiddle link

function makeMeReadonly(checkbox){ 
    checkbox.checked = !checkbox.checked; 
} 

<asp:CheckBox id="checkbox1" onclick="makeMeReadonly(this)" /> 

<asp:CheckBox id="checkbox1" onclick="this.checked = !this.checked" /> 
如果你想讓它內嵌

但是你不應該依賴這個安全性,因爲當javascript不可用和/或客戶端代碼不是很難解決客戶端代碼限制時,它會是一個常規復選框,但在你的情況下,因爲你有一個只讀視圖,我不認爲你有任何邏輯來保存更改。

6

你也可以這樣。

<asp:CheckBox id="checkbox1" Text="Custom" onclick="javascript: return false;" /> 

這會使它作爲

<input type="checkbox" 
checked onclick="javascript: return false;">Custom</input> 
+1

我喜歡這個解決方案,但是我在代碼背後做了。 (myControl as CheckBox).Attributes.Add(「onclick」,「javascript:return false;」); – Matt 2013-09-02 12:02:09

1

我剛剛遇到同樣的問題,並通過複選框上的OnClick事件修復它。在事件處理程序中,.Checked狀態被設置爲它應該顯示的值。

private void chkBox_CheckStateChanged(object sender, EventArgs e) 
    { 
     chkBox.Checked = boolDatabasevalue; 
     return; 
    } 

工程很好,用戶可以點擊複選框,但複選標記不會改變。

唯一的問題是指示焦點的輕微邊框陰影。但是,正如OP所期待的那樣,複選標記是易於閱讀的大膽。

注意:這是C#,但在Asp.Net中應該類似地工作。