listbox.Items.Count 在代码中等于零
listbox.Items.Count is equal to zero in code
我的 aspx 页面中有两个列表框,我将它们命名为 ListBox1 和 ListBox2。
我在页面加载中设置了 ListBox1 的数据源,但 ListBox2 是空的。
protected void btnSubmit_Click(object sender, EventArgs e)
{
for (int count = 0; count <= Convert.ToInt32(lbright.Items.Count); count++)
{
string str = null;
string[] strArr = null;
int count2 = 0;
str = lbright.Items[count].ToString();
char[] splitchar = { ';' };
strArr = str.Split(splitchar);
for (count2 = 0; count2 <= strArr.Length - 1; count++)
{
Response.Write(
"Option" + count + ":<br />" +
" " + "Value" + count2 + ":" + strArr[count]
);
}
}
}
用户可以双击 ListBox1 中的项目将它们添加到 ListBox2.I 中编写了此代码 JQuery.Everything 在这部分工作正常。
<script type="text/javascript">
$(document).ready(function () {
$('#lbleft').on('dblclick', 'option', function () {
var element = $("#lbleft option:selected");
var value = element.val();
var text = element.text();
element.remove();
$("#lbright").append('<option value="' + value + '">' + text + '</option>');
});
$('#lbright').on('dblclick', 'option', function () {
var element = $("#lbright option:selected");
var value = element.val();
var text = element.text();
element.remove();
$("#lbleft").append('<option value="' + value + '">' + text + '</option>');
});
});
问题是当我想从 ListBox2 中读取项目时。
我的页面中有一个按钮,用户可以通过单击此按钮来保存 ListBox2 的项目 button.but ListBox2 的项目数在代码隐藏中为零。
由于您在客户端使用 JS 将项目添加到第二个列表框,它不会将这些值添加到 viewstate
,这就是为什么这些值在服务器端使用 lbright.Items
不可用。 Asp.net 依靠视图状态来获取这些值,如果在服务器端设置这些值,它将可用。
要使其正常工作,您可以使用 Request.Form["lbright"].ToString()
将这些附加值添加到第二个列表框。如果这些值是由最终用户选择的,比如单击每个选项——为什么?因为如果选择这些我们将发布到服务器,对于多个选项,它将给出逗号分隔值。
但如果最终用户没有选择它们,上述建议将不起作用。要解决这个问题,您需要设置一个隐藏字段(向隐藏字段添加新值并附加其余部分)并使用相同的东西 Request.Form["hdnField"].ToString()
来获取它,这里的优点是,它独立于最终用户从中选择的项目右框。
我的 aspx 页面中有两个列表框,我将它们命名为 ListBox1 和 ListBox2。
我在页面加载中设置了 ListBox1 的数据源,但 ListBox2 是空的。
protected void btnSubmit_Click(object sender, EventArgs e)
{
for (int count = 0; count <= Convert.ToInt32(lbright.Items.Count); count++)
{
string str = null;
string[] strArr = null;
int count2 = 0;
str = lbright.Items[count].ToString();
char[] splitchar = { ';' };
strArr = str.Split(splitchar);
for (count2 = 0; count2 <= strArr.Length - 1; count++)
{
Response.Write(
"Option" + count + ":<br />" +
" " + "Value" + count2 + ":" + strArr[count]
);
}
}
}
用户可以双击 ListBox1 中的项目将它们添加到 ListBox2.I 中编写了此代码 JQuery.Everything 在这部分工作正常。
<script type="text/javascript">
$(document).ready(function () {
$('#lbleft').on('dblclick', 'option', function () {
var element = $("#lbleft option:selected");
var value = element.val();
var text = element.text();
element.remove();
$("#lbright").append('<option value="' + value + '">' + text + '</option>');
});
$('#lbright').on('dblclick', 'option', function () {
var element = $("#lbright option:selected");
var value = element.val();
var text = element.text();
element.remove();
$("#lbleft").append('<option value="' + value + '">' + text + '</option>');
});
});
问题是当我想从 ListBox2 中读取项目时。
我的页面中有一个按钮,用户可以通过单击此按钮来保存 ListBox2 的项目 button.but ListBox2 的项目数在代码隐藏中为零。
由于您在客户端使用 JS 将项目添加到第二个列表框,它不会将这些值添加到 viewstate
,这就是为什么这些值在服务器端使用 lbright.Items
不可用。 Asp.net 依靠视图状态来获取这些值,如果在服务器端设置这些值,它将可用。
要使其正常工作,您可以使用 Request.Form["lbright"].ToString()
将这些附加值添加到第二个列表框。如果这些值是由最终用户选择的,比如单击每个选项——为什么?因为如果选择这些我们将发布到服务器,对于多个选项,它将给出逗号分隔值。
但如果最终用户没有选择它们,上述建议将不起作用。要解决这个问题,您需要设置一个隐藏字段(向隐藏字段添加新值并附加其余部分)并使用相同的东西 Request.Form["hdnField"].ToString()
来获取它,这里的优点是,它独立于最终用户从中选择的项目右框。