代码之家  ›  专栏  ›  技术社区  ›  iamserious

不能在Ajax回发时将值赋给用户控件中的变量…或类似的东西!

  •  0
  • iamserious  · 技术社区  · 16 年前

    我有一个简单的用户控件,它根据用户ID在几个图像的可见性之间切换。第一次加载页面时,用户ID被正确分配(我正在调试)。但是,页面上还有两个用于过滤用户类型的按钮,它们通过Ajax(不是工具箱,而是普通的Javascript Ajax)执行功能。

    当单击其中一个按钮时,用户控件无法获取用户ID,它始终显示为零。哦,顺便说一句,用户控件在一个数据中继器中,所以它发生在每个用户身上。总是。。或者就是这个想法。我还有其他几个类似的页面(没有一个页面使用Ajax),用户控件也没有任何问题。

    我的用户控制代码:

    公共部分类UCAuthorityBadges:BaseUserControl {

        protected void Page_Load(object sender, EventArgs e)
        {
                if (UserId > 0 && UOBJ.GroupId > 0)
                {
                    DataSet DS = new DataSet();
                    DS = huDataAccessLayer.dbTools.GetUserAuthority(UserId);
    
                    if (!utils.isDataSetEmpty(DS))
                    {
                        imgTeamBadge.Visible = Convert.ToBoolean(DS.Tables[0].Rows[0]["isTeam"]);
                        imgDoctorBadge.Visible = Convert.ToBoolean(DS.Tables[0].Rows[0]["isDoctor"]);
                        imgAdminBadge.Visible = Convert.ToBoolean(DS.Tables[0].Rows[0]["isAdmin"]);
                        imgVolunteerBadge.Visible = Convert.ToBoolean(DS.Tables[0].Rows[0]["isVolunteer"]);
                        imgBloggerBadge.Visible = Convert.ToBoolean(DS.Tables[0].Rows[0]["isBlogger"]);
                    }
                }
          }
    }
    

    数据转发器是这样的:

    <div class="profileContainer">
    <asp:HyperLink Enabled='<%# Eval("isActive") %>' ID="profileName_link" runat="server" Text='<%# Eval("Username") %>' NavigateUrl='<%# "/Profile/" + Eval("Username") %>'></asp:HyperLink>
    <img id="friend_image" runat="server" src="/css/images/icons/friend.gif" alt="friend" title="Friend" visible='<%# Convert.ToBoolean(Eval("isFriend")) %>' style="vertical-align:middle" /> 
    <ucAB:AuthorityBadges ID="ucAuthBadge" runat="server" UserId='<%# Convert.ToInt32(Eval("UserId")) %>' />
    <%# Eval("UserId") %>
    <asp:Label ID="status_label1" Text=" · Friend Request Pending" style="font-size:small;" Visible='<%# Convert.ToBoolean(Eval("isFriendReqPending")) %>' runat="server" Font-Bold="false"></asp:Label>
     </div>
    

    在这里,在usercontrol行之后,我将立即打印user id,以查看它的有效性(通过<%eval(“user id”)%>)和用户ID是否也有效。我不明白为什么用户控件不能在Ajax回发上接收它?

    任何暗示都非常好,

    非常感谢!

    1 回复  |  直到 16 年前
        1
  •  2
  •   Shagglez    16 年前

    我认为这里的问题是,您的执行代码实际上位于页面加载事件中,该事件发生在转发器数据绑定之前。解决方法是将当前位于页面中的代码加载到另一个公共方法中,然后在itemdatabound事件中,需要找到控件并使用所需参数手动调用公共方法。这样,一旦控件已初始化,就可以填充所需的所有字段。

    希望有帮助。