asp.net - 客户端控制更改没有看到服务器端

时间:2011-07-25 05:15:17

标签: javascript jquery .net asp.net

我有两个列表框。一个填充在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();

2 个答案:

答案 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];

如果需要,您可以对此字符串执行拆分以将其分解为数组。