首先,我要告诉我我不是ASC / C#开发人员,而是做作业。 (我希望有人会明白我想要的:D,因为我不知道确切的用语)

我有Friends.aspx和Friends.aspx.cs

在Friends.aspx中,我有类似
<%@ Reference Control="~/FriendBox.ascx" %>
<div class="controlcontainer clearfix friendlist_containeritems" id="divFriends" runat="server"> </div>


在Friends.aspx.cs中,我用它来填充divFriends:


foreach (FBUser user in list){
      Control control = LoadControl("FriendBox.ascx");
      FriendBox myControl = (FriendBox)control;
      myControl.user = user;
      divFriends.Controls.Add(myControl);
  }


在我的页面中有一个表单,并且divFriends在表单内部。我有这种形式的按钮。如果我只是按一下按钮,则页面将被提交,并且可以从选定的复选框中检索值。 (每个控件都包含一个复选框)

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

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 } }


使用Jquery提交表单时,如何使divFriends中的内容可访问?
提前致谢。

编辑:这是我使用的JavaScript

 $(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;
    });


});
javascript之所以有效,是因为我可以提交数据,并且可以接收回来的数据(json),当我查看提交的数据时,我没有divFriends的复选框。

最佳答案

该问题似乎是asp.net状态管理问题。您只添加了FriendBox一次(我假设,如果不是page.ispostback的话,可能就很流行),而不是每次点击时都添加一次。由于FriendBox是动态添加的,因此无法幸免于回发,因此当您尝试阅读它时就不存在。

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

关于c# - Asp.net从控件中检索内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4444211/

10-16 10:02