2010-06-17 2 views
0

UserId에 따라 몇 가지 이미지의 표시 여부를 전환하는 간단한 사용자 컨트롤이 있습니다. 페이지가 처음으로로드되면 userID가 올바르게 할당됩니다 (디버깅 중입니다). 그러나 사용자의 유형을 필터링하기 위해 페이지에 두 개의 다른 버튼이 있으며 Ajax (툴킷이 아니라 일반 javascript ajax)를 통해 기능을 수행합니다.캔트는 아약스 포스트 백의 사용자 컨트롤에서 변수에 값을 할당한다.

이러한 버튼 중 하나를 클릭하면 사용자 정의 컨트롤 사용자 ID를 얻을 수 없으며, 항상 0으로 표시됩니다. 아, btw, UserControl은 DataRepeater에 있으므로 모든 사용자마다 항상 발생합니다 .. 또는 아이디어가 있습니다. 나는 이런 식으로 여러 다른 페이지를 가지고있다. (그들 중 누구도 아약스를 가지고 있지 않다.) 사용자 컨트롤은 아무런 문제가 없다.

내 사용자 제어 코드 :

공공 부분 클래스 ucAuthorityBadges : 즉시 UserControl을 한 후, 여기에

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

: 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"]); 
       } 
      } 
     } 
} 

그리고 데이터 중계기는이 같은 것입니다 라인, 나는 단지 그 유효 여부 (< % # Eval ("UserId") %>와 사용자 아이디가 유효합니다. 나는 왜 사용자 정의 컨트롤이 아약스 포스트 백을 가져올 지 이해하지 못한다.

이에서 어떤 힌트가 정말 좋은 것,

정말 고마워요!

답변

2

여기서 문제는 실제로 실행 코드가 Repeater가 DataBound가되기 전에 발생하는 Page_Load 이벤트에 있다고 생각합니다. 이에 대한 해결책은 현재 Page_Load에있는 코드를 다른 공용 메서드로 옮기고 ItemDataBound 이벤트에서 컨트롤을 찾고 필요한 매개 변수로 public 메서드를 수동으로 호출해야합니다. 이렇게하면 컨트롤이 이미 초기화 된 후에 필요한 모든 필드가 채워집니다.

희망이 있습니다.

+0

고마워요! 그것은 도왔다!! – iamserious

관련 문제