【问题标题】:how to display checkboxes on read-only form (ASP.NET)如何在只读表单上显示复选框(ASP.NET)
【发布时间】:2011-08-20 14:42:08
【问题描述】:

我有一个从数据库自动填写的只读表格。我有几个具有真/假值的字段,并希望它们显示为空的或选中的复选框。我可以对复选框控件进行数据绑定并禁用它,但随后它显示为灰色。有没有一种简单的方法来改变它,让它以正常、易于阅读的粗体显示,但仍然被禁用?如果没有,最好的方法是什么?我应该使用图片吗?

【问题讨论】:

    标签: asp.net forms checkbox readonly


    【解决方案1】:

    你也可以这样。

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

    这会将其呈现为

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

    【讨论】:

    • 我喜欢这个解决方案,不过我是在后面的代码中完成的。 (myControl as CheckBox).Attributes.Add("onclick", "javascript: return false;");
    【解决方案2】:

    有趣的问题!

    只有 一个 问题我可以看到使用图像而不是普通复选框,这就是 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/

    我希望这会有所帮助! :)

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-18
          • 2021-10-07
          • 1970-01-01
          • 2021-06-08
          • 1970-01-01
          • 2020-09-29
          相关资源
          最近更新 更多