2013-04-21 2 views
0

(Asp.net 4) 에 updatepanel 내부에서 코멘트를 저장 난 내가 모든 블로그 기사와 각 블로그에 의견을 표시 할 리피터를 사용하여 블로그를 가지고있다. 사용자가 블로그에 댓글을 게시하는 방법을 변경하려고합니다. UpdatePanel에있는 각 블로그 아래에 주석을 넣고 싶습니다. 주석을 작성하고 저장 버튼을 클릭하면 주석을 새로 고침하여 새 주석이 표시됩니다. 그러나 나는 이것을 달성하는 데 어려움을 겪고있다. 나는 Repeater의 ItemTemplate을에서 UpdatePanel을 추가하고, 주석을 저장하기위한 텍스트 상자와 버튼을 추가했습니다. 각 UpdatePanel은 블로그의 ID와 함께 배치됩니다. 하지만 올바른 blog-id에 대한 주석을 저장하는 코드를 작성한 다음 해당 UpdatePanel을 새로 고치는 방법을 모르겠습니다.리피터

<asp:Repeater ID="RepeaterBlog" runat="server"> 
      <ItemTemplate>   
       <article> 
        <% if (repeaterCounter == 0) 
         { 
          Response.Write("<header class=\"firstArticleInBlog\">"); 
         } 
         else 
         { 
          Response.Write("<header class=\"normalArticle\">"); 
         } 
        %> 
        <h2><%# Eval("article_header") %> &nbsp;<span class="date"> 
        <time datetime="<%# GetPubDate(Eval("article_date")) %>"><%# FormatDate(Eval("article_date")) %></time></span></h2></header> 

        <p><%# Eval("article_content") %><p><br /> 
        <div class="comments">     
        <div class="showhidecomments"> 
         <!--<a class="iframe-comments" data-fancybox-type="iframe" href='WriteComments.aspx?BlogId=<%# DataBinder.Eval(Container, "DataItem.id") %>'>Skriv kommentar</a> | --> 
         <a href="javascript:void(0);" title="i<%# Eval("id") %>">Vis/Skriv kommentarer (<%# CountComments (DataBinder.Eval(Container, "DataItem.id")) %>)</a> | <a href="javascript:void(0);" title="i<%# Eval("id") %>" >Skjul kommentarer</a> 
        </div> 
        <section> 
        <article> 
        <div id="i<%# Eval("id") %>" style="display: none;"> 
         <asp:UpdatePanel ID="upPanel" runat="server"> 
          <Triggers> 
           <asp:AsyncPostBackTrigger ControlID="cmdSaveComment" EventName="Click" /> 
          </Triggers> 
          <ContentTemplate> 
           <%# GetComments (DataBinder.Eval(Container, "DataItem.id")) %> 
           <asp:TextBox ID="txtName" runat="server" /> 
           <asp:TextBox ID="txtComment" runat="server" TextMode="MultiLine" /> 
           <asp:Button ID="cmdSaveComment" runat="server" OnClick="cmdSaveComment_Click" /> 
          </ContentTemplate>  
         </asp:UpdatePanel> 
         </div>     
        </article> 
        </section> 
        </div> 
        <% repeaterCounter++; %> 
       </article> 
      </ItemTemplate>    
      </asp:Repeater> 

그리고 코드 숨김에서 :

protected void cmdSaveComment_Click(object sender, EventArgs e) 
     { 
      //simplified code: 
      string name = txtName.Text; 
      string comment = txtComment.Text; 
      int blogId = (int)(Eval("DataItem.id")); 

      dataHandler.NewComment(name, comment, blogId);    
     } 

내가 적어도 뭔가에 가까운 여기 건가요, 아니면 내가 잘못된 궤도에 완전히 오전

코드

?

답변

2

당신은 리피터와 버튼의 명령 이름의 속성에 대한 ItemCommand 속성을 사용해야합니다.

는 먼저 리피터와 영문에서 버튼의 명령 이름의 이벤트 이름을 선언합니다. CommandName은 단추에 대한 OnClick을 대체합니다. 또한 단추에 명령 인수 (주석이있는 기사 레코드의 ID 임)를 지정합니다.

<asp:Repeater ID="RepeaterBlog" runat="server" OnItemCommand="RepeaterBlog_ItemCommand"> 

<asp:Button ID="cmdSaveComment" runat="server" CommandName="SaveComment" CommandArgument='<%# Eval("id")%>' /> 

은 이제

+0

매우 잭 감사 시작할 수 있어야

void RepeaterBlog_ItemCommand(Object Sender, RepeaterCommandEventArgs e) { if(e.CommandName == "SaveComment") { string name = ((TextBox)e.Item.FindControl("txtName")).Text; string comment = ((TextBox)e.Item.FindControl("txtComment")).Text; dataHandler.NewComment(name, comment, e.CommandArgument); } } 

뒤에 코드에서이 추가! 나는이 문제를 해결할 수 있어야한다. :) –