C# Asp.net从控件检索内容

C# Asp.net从控件检索内容,c#,asp.net,C#,Asp.net,我将首先告诉你我不是ASC/C开发人员,这是一个家庭作业。我希望有人能理解我想要的:D,因为我不知道确切的术语 我有Friends.aspx和Friends.aspx.cs 在Friends.aspx中,我有 在Friends.aspx.cs中,我有以下内容来填充我的朋友: foreach (FBUser user in list){ Control control = LoadControl("FriendBox.ascx"); FriendBox myCon

我将首先告诉你我不是ASC/C开发人员,这是一个家庭作业。我希望有人能理解我想要的:D,因为我不知道确切的术语

我有Friends.aspx和Friends.aspx.cs

在Friends.aspx中,我有

在Friends.aspx.cs中,我有以下内容来填充我的朋友:


foreach (FBUser user in list){   
      Control control = LoadControl("FriendBox.ascx");
      FriendBox myControl = (FriendBox)control;
      myControl.user = user;                
      divFriends.Controls.Add(myControl);                   
  }
在我的页面a中有一个表单,divFriends在表单中。我有一个这种形式的按钮。如果我只是按下按钮,我的页面就会被提交,我可以从选中的复选框中检索值。每个控件都包含一个复选框

在我尝试通过Ajax JQuery提交页面之前,一切都很好。 我的问题是,即使复选框在页面上,我也可以使用它们,选择它们,当我进行ajax提交时,我无法访问复选框中的值。 这是我用来从复选框中检索值的代码:

});
javascript正在工作,因为我可以提交数据,也可以接收json返回的数据,当我查看提交的数据时,我没有divFriends的复选框。

问题似乎是asp.net状态管理问题。我假设您只添加了一次FriendBox,可能带有if not page.ispostback之类的内容,而不是在每次点击的页面上。由于FriendBox是动态添加的,所以它在回发后无法存活,因此当您尝试阅读它时它不存在


您应该在每次加载页面时,在加载viewstate之前在Init上添加FriendBox。在初始化期间添加控件将允许Viewstate跟踪值,并可能会解决此问题。

请显示提交表单的javascript,好吗?这是一个相当复杂的家庭作业:/添加控件的foreach循环在代码背后的什么地方?哪个事件,有什么逻辑吗?还有什么特别的原因让你像那样动态添加控件而不是去极化拼写?使用中继器/其他数据绑定控件? foreach(Control ctrl in divFriends.Controls) {
var friendBox = ctrl as FriendBox; //i can get here
if (friendBox != null) { //i never get here - because friendBox is allways null } }

 $(document).ready(function () {
        $('.big').click(function () {
            //.big is my button 
            $('.big').attr('disabled', true);

        var form_form = $(document).find('form');
        $.ajax({
            type: 'POST',
            url: form_form.attr('action'),
            data: form_form.serialize(),
            dataType: 'json',
            success: function (data) {                    
                console.log('success');
            },
            complete: function (XMLHttpRequest, textStatus) {
                $('.big').attr('disabled', false);
            }
        });
        return false;
    });