如何在只读窗体上显示复选框(ASP.NET)

时间:2011-05-07 03:54:55

标签: asp.net forms checkbox readonly

我有一个从数据库自动填写的只读表单。我有几个具有true / false值的字段,并希望它们显示为空或已选中的复选框。我可以对复选框控件进行数据绑定并禁用它,但它会显示为灰色。是否有一种简单的方法来改变它,以便它以正常,易于阅读的大胆出现,但仍然被禁用?如果没有,最好的方法是什么?我应该使用图像吗?

4 个答案:

答案 0 :(得分:6)

你也可以这样。

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

将其呈现为

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

答案 1 :(得分:3)

有趣的问题!

我只能使用图像而不是普通的复选框看到一个问题,这就是活动复选框与禁用(基于图像)复选框的不同之处。因此,如果您使用图像路径,则可能需要设置所有复选框的样式。 :)

您可以使用以下jQuery方法有效地禁用任何复选框(到目前为止,我仅在Chrome和IE 9中进行了测试)。

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

这将使用“readonly”类“禁用”任何复选框。

或者,您可以使用内联JavaScript函数(不建议使用albiet,因为它会增加混乱和混淆):

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

您使用“preventDefault()”而不是“return false”的原因是因为返回false将停止传播。这意味着您的点击事件不会冒泡到父元素。这可能会导致其他代码出现问题......但这不太可能。

另外,就像Bala R提到的那样,你不能依赖这些限制来工作。您的服务器端代码应该知道这些值是只读的,并且不要更新它们。

以下是jsFiddle示例:http://jsfiddle.net/xixionia/3rXCB/

我希望这有用! :)

答案 2 :(得分: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不可用时它将是一个常规复选框和/或客户端代码不是很难解决客户端代码限制,但在您的情况下,因为您有一个只读看来,我认为你没有任何保存更改的逻辑。

答案 3 :(得分:1)

我遇到了同样的问题,并通过复选框上的OnClick事件修复了它。在事件处理程序中,.Checked状态被设置为它应该显示的值。

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

效果很好,用户可以点击复选框,但复选标记不会改变。

唯一的问题是指示焦点的轻微边框阴影。但是,正如OP所寻求的那样,复选标记是易于阅读的大胆。

注意:这是C#,但在Asp.Net中,这应该是类似的。