【发布时间】:2011-08-20 14:42:08
【问题描述】:
我有一个从数据库自动填写的只读表格。我有几个具有真/假值的字段,并希望它们显示为空的或选中的复选框。我可以对复选框控件进行数据绑定并禁用它,但随后它显示为灰色。有没有一种简单的方法来改变它,让它以正常、易于阅读的粗体显示,但仍然被禁用?如果没有,最好的方法是什么?我应该使用图片吗?
【问题讨论】:
标签: asp.net forms checkbox readonly
我有一个从数据库自动填写的只读表格。我有几个具有真/假值的字段,并希望它们显示为空的或选中的复选框。我可以对复选框控件进行数据绑定并禁用它,但随后它显示为灰色。有没有一种简单的方法来改变它,让它以正常、易于阅读的粗体显示,但仍然被禁用?如果没有,最好的方法是什么?我应该使用图片吗?
【问题讨论】:
标签: asp.net forms checkbox readonly
你也可以这样。
<asp:CheckBox id="checkbox1" Text="Custom" onclick="javascript: return false;" />
这会将其呈现为
<input type="checkbox"
checked onclick="javascript: return false;">Custom</input>
【讨论】:
有趣的问题!
只有 一个 问题我可以看到使用图像而不是普通复选框,这就是 active 复选框与禁用(基于图像)复选框的不同之处。所以,如果你走图像路线,你可能想要设置 all 复选框的样式。 :)
您可以使用以下 jQuery 方法有效地禁用任何复选框(到目前为止,我只在 Chrome 和 IE 9 中进行了测试)。
$('.readonly:checkbox').click(function(e) {
e.preventDefault();
});
这将“禁用”任何带有“只读”类的复选框。
或者,您可以使用内联 JavaScript 函数(虽然不推荐,因为它会增加混乱和混乱):
<input type="checkbox" onclick="event.preventDefault();" />
您使用“preventDefault()”而不是“return false”的原因是因为返回 false 将停止传播。这意味着您的点击事件不会冒泡到父元素。这可能会导致其他代码出现问题...但不太可能。
另外,就像 Bala R 提到的那样,您不能依赖这些限制来工作。您的服务器端代码应该知道这些值是只读的,并且不要更新它们。
这里是 jsFiddle 示例:http://jsfiddle.net/xixionia/3rXCB/
我希望这会有所帮助! :)
【讨论】:
您可以使用 javascript 执行类似的操作,并将其用于复选框的 onclick 处理程序。
function makeMeReadonly(checkbox){
checkbox.checked = !checkbox.checked;
}
和
<asp:CheckBox id="checkbox1" onclick="makeMeReadonly(this)" />
或
<asp:CheckBox id="checkbox1" onclick="this.checked = !this.checked" />
如果你想内联。
但是你不应该依赖这个来保证安全性,因为当 javascript 不可用和/或客户端代码不那么难解决客户端代码限制时,它将是一个常规复选框,但在你的情况下,因为你有一个只读的看来,我认为您没有任何逻辑来保存更改。
【讨论】:
我刚刚遇到了同样的问题,并通过复选框上的 OnClick 事件进行了修复。在事件处理程序中,.Checked 状态设置为它应该显示的值。
private void chkBox_CheckStateChanged(object sender, EventArgs e)
{
chkBox.Checked = boolDatabasevalue;
return;
}
效果很好,用户可以点击复选框,但复选标记不会改变。
唯一的问题是表示焦点的轻微边框阴影。但是,正如 OP 所寻找的那样,复选标记是易于阅读的粗体。
注意:这是 C#,但在 Asp.Net 中应该类似。
【讨论】: