我有两个列表框。一个填充在Page_Load上,另一个保持为空。 用户具有用于将用户从第一列表添加到第二列表并返回的按钮。 提交表单时,第二个列表为空,就像它被发送到客户端时一样。这是JS代码:
function add() {
$('#AvailableUsers option:selected').appendTo('#SelectedUsers');
}
function addall() {
$('#AvailableUsers option').appendTo('#SelectedUsers');
}
function remove() {
$('#SelectedUsers option:selected').appendTo('#AvailableUsers');
}
function removeall() {
$('#SelectedUsers option').appendTo('#AvailableUsers');
}
如何将客户端更改带回服务器端?
编辑:服务器端代码:
bool canDismiss = chkCanDismiss.Checked;
string messageText = tbMessageText.Text;
PaymentsDataContext db = new PaymentsDataContext();
foreach (ListItem li in SelectedUsers.Items)
{
UserMessages newMessage = new UserMessages();
newMessage.userName = li.Text;
newMessage.messageText = messageText;
newMessage.dismissed = false;
newMessage.canDismiss = canDismiss;
db.UserMessages.InsertOnSubmit(newMessage);
}
db.SubmitChanges();
答案 0 :(得分:3)
您还必须在hidden field
中附加/存储这些项目,然后您可以从服务器端的隐藏字段中获取项目。
这是因为您在客户端所做的更改在服务器端不可用。
答案 1 :(得分:1)
如果我正确阅读,您正尝试使用“所选用户”服务器端的用户。我将有一个表单提交客户端事件,选择SelectedUsers列表中的所有用户。这消除了对隐藏变量的需要。 注意将以下内容与现有的jQuery结合使用
$(document).ready(function(){
$(form).submit(function(){
$('#SelectedUsers option').attr("selected","selected");
return true;
});
});
编辑回复评论:当最初在页面上加载所选用户控件时,没有任何项目,也没有选择任何内容。使用当前代码,选项将添加到客户端的选定用户列表中。目前,在提交表单时,不会选择这些值,因此不会将其发回服务器。要将值发布回服务器,需要先选择它们。上面代码应该做的是选择SelectedUsers列表中的用户选项,并在表单提交时将选定的值与表单的其余部分一起发布回服务器。
编辑2,服务器端代码:您可能需要通过Request.Form
对象访问这些值。使用多个控件(如多个选择框),多个值将以逗号分隔的字符串形式传递。
string rawSelUsers = Request.Form[SelectedUsers.ClientID];
如果需要,您可以对此字符串执行拆分以将其分解为数组。