我发现了这个错误。它显而易见:我没有数据绑定到正确的复选框列表!我本来应该数据绑定到filterONTYPElist,但我正在数据绑定到filterONDATASETlist ...复制粘贴错误,对不起......
我有一个复选框列表,呈现如下:
以下是处理数据绑定的代码:
FilterOnTypeCheckboxList.DataSource = listCheckboxItems;
FilterOnDatasetCheckboxList.DataValueField = "Value";
FilterOnDatasetCheckboxList.DataTextField = "Text";
FilterOnTypeCheckboxList.DataBind();
我的数据源是list<CheckBoxItem>
。该类看起来如下,你可以清楚地看到有一个公共属性Value和一个公共属性Text:
[Serializable]
public class CheckboxItem
{
public string Text { get; set; }
public string Value { get; set; }
public CheckboxItem(string value, string text)
{
Value = value;
Text = text;
}
public override string ToString()
{
return "brompot";
}
}
但由于某种原因,每个复选框的文本AND值使用CheckBoxItem类的ToString()方法,而不是适当的属性“Value”和“Text”。
PS:我检查了checkboxitems对象的值和文本不是字符串“brompot”......
不能让toString()方法返回文本或值,因为我希望复选框值为value属性和复选框(标签)文本
答案 0 :(得分:3)
我进行了快速测试,这似乎按预期工作。 你能提供更多细节吗?另外,验证我提供的代码是否与您正在执行的操作类似?
<div>
<asp:Button ID="btnBind" runat="server" Text="Bind" OnClick="btnBind_Click" />
<asp:CheckBoxList ID="cbList" runat="server"></asp:CheckBoxList>
</div>
public partial class _Default : Page
{
protected void btnBind_Click(object sender, EventArgs e)
{
List<CheckboxItem> listCheckboxItems = new List<CheckboxItem>();
listCheckboxItems.Add(new CheckboxItem("Val-1", "Item-1"));
listCheckboxItems.Add(new CheckboxItem("Val-2", "Item-2"));
listCheckboxItems.Add(new CheckboxItem("Val-3", "Item-3"));
listCheckboxItems.Add(new CheckboxItem("Val-4", "Item-4"));
listCheckboxItems.Add(new CheckboxItem("Val-5", "Item-5"));
this.cbList.DataSource = listCheckboxItems;
this.cbList.DataValueField = "Value";
this.cbList.DataTextField = "Text";
this.cbList.DataBind();
}
}
[Serializable]
public class CheckboxItem
{
public string Text { get; set; }
public string Value { get; set; }
public CheckboxItem(string value, string text)
{
Value = value;
Text = text;
}
public override string ToString()
{
return "brompot";
}
}
答案 1 :(得分:0)
我认为您的错误是因为您的ToString()
方法。
编辑为此,看看是否能解决问题:
[Serializable]
public class CheckboxItem
{
public string Text { get; set; }
public string Value { get; set; }
public CheckboxItem(string value, string text)
{
Value = value;
Text = text;
}
public override string ToString()
{
return Text;
}
}