我的aspx页面中有两个列表框,我称之为ListBox1和ListBox2。
我在pageload中设置了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中编写了这段代码。在这部分中一切正常。
<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的项目。但是ListBox2的项目数在代码隐藏中为零。
答案 0 :(得分:2)
由于您使用JS向客户端的第二个ListBox添加项目,因此无法将这些值添加到viewstate
,这就是使用lbright.Items
在服务器端无法使用这些值的原因。 Asp.net依赖于viewstate来获取这些值,如果在服务器端设置了这些值,它将可用。
要使其正常运行,您可以使用Request.Form["lbright"].ToString()
将这些附加值添加到第二个列表框中。如果最终用户选择了这些值,例如点击每个选项 - 为什么?因为如果选择我们将发布到服务器的那些,对于多个选项,它将给出逗号分隔值。
但如果最终用户没有选择它们,则上述建议将无效。要解决这个问题,你需要设置一个隐藏字段(向隐藏字段添加新值并附加休息)并使用相同的东西Request.Form["hdnField"].ToString()
来获取它,这里的优点是,它独立于最终用户选择的项目右边框。