【问题标题】:asp.net - client-side control changes not seen server-sideasp.net - 在服务器端看不到客户端控制更改
【发布时间】:2011-07-25 05:15:17
【问题描述】:

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

【问题讨论】:

  • 使用ajax告诉服务器新的状态(不要回发)
  • @Raynos - 如果我通过 ajax 将这些值发回服务器,我在哪里存储这些值?
  • @EladLachmi 数据库似乎是个好地方,你考虑过使用 REST 吗?

标签: javascript jquery .net asp.net


【解决方案1】:

您还必须将这些项目附加/存储在hidden field 中,然后您可以从服务器端的隐藏字段中获取这些项目。

这是因为您在客户端所做的更改在服务器端不可用。

【讨论】:

  • 这最终成为最简单的解决方案。谢谢!
【解决方案2】:

如果我没看错,您正在尝试使用“选定用户”服务器端的用户。我会有一个表单提交客户端事件,它选择 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];

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

【讨论】:

  • 对不起,我不明白。这应该怎么做?
  • 我在提交函数中添加了一个返回以确保表单提交。你能提供更多关于这不起作用的信息吗?表单提交了吗,您如何访问此控件的选定值?
  • 我编辑了帖子以显示服务器端代码。至于不工作......我在服务器端得到一个空列表。
猜你喜欢
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 2012-11-29
  • 2012-09-25
  • 2017-12-23
  • 2014-08-27
  • 2023-04-03
  • 1970-01-01
相关资源
最近更新 更多