【问题标题】:Why I can't set a value on a asp:CheckBox?为什么我不能在 asp:CheckBox 上设置值?
【发布时间】:2012-03-24 20:22:12
【问题描述】:

没有Value属性:

<asp:CheckBox ID="CheckBox1" runat="server" />

在标准 HTML 中这是允许的:

<input type="checkbox" ID="CheckBox1" value="My Valyue" />

为什么?

【问题讨论】:

标签: c# .net checkbox


【解决方案1】:

Text 属性用于为复选框呈现标签。

该控件有一个InputAttributes 属性,您可以将其添加到:

myChk.InputAttributes.Add("value", "My Value");

我相信,如果您只是将value 属性添加到标记中,它也会被填充。

您可以像这样访问该值:

myChk.InputAttributes["value"];

回答为什么Value 不是CheckBox 控件的内置属性的问题:

一个孤立的CheckBox(就其本身而言)不需要任何价值。根据定义,它是一个布尔值,并由其 ID 标识。您需要做的就是检查它是否被检查。

当您分组复选框时,该值开始发挥作用,并且有一个控件-使用ListItemCheckBoxList-每个ListItem确实有一个Value属性。

【讨论】:

  • 这似乎很奇怪,我得到它用于其他控件,但复选框?价值似乎更有意义。我想这都是关于从 GenericElement 继承等,以便跨通用接口进行迭代。
  • 不!文本属性应该是复选框附近的“标签”,而不是复选框本身的值..
  • @MrLister - 如果您有 几个 具有相同 name 属性的复选框(使它们成为组的一部分),您将如何区分它们?该属性长期以来一直是复选框的一部分。
  • @MrLister - 一点也不。我们有时会忘记复选框可以这样分组...
  • 是的,但我应该知道这样的事情;熟悉 HTML。当然,当提交表单时,复选框的value 会被发布,任何人都可以看到!
【解决方案2】:

不使用 asp:CheckBox 控件,而是使用 html 输入复选框,并在服务器上运行它。

<input type="checkbox" id="ck" runat="server" value='<%# Eval("Value") %>' />
<asp:Label ID="lbl" runat="server" AssociatedControlID="ck" Text='<%# Eval("Name") %>'></asp:Label>

现在您可以从代码隐藏中将其作为 HtmlInputCheckBox 引用(我的最新示例是在转发器内,因此我可以用其他元素(如工具提示图像)装饰此复选框列表替代品)。

foreach (RepeaterItem repeaterItem in repCheckboxes.Items)
{
    HtmlInputCheckBox listItem = (HtmlInputCheckBox)repeaterItem.FindControl("ck");
    if (listItem.Checked)
    {
         string val = listItem.Value;
         ...

我知道这并不能回答 OP 的“为什么”,但这在搜索这个确切问题时出现的频率很高,这是一个很好的解决方案。至于为什么,我认为 MS 将其排除在外是愚蠢的,因为您无法控制 CheckBoxList 中的 html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2017-12-01
    • 2020-01-08
    相关资源
    最近更新 更多