2017-06-30 3 views
0

Je suis en train de développer un mur de messages avec C# et MS SQL, jusqu'à présent je peux créer des messages et les récupérer en utilisant un répéteur, maintenant je dois faire des commentaires dans la section commentaire Pour cela, j'ai affecté un identifiant de publication pour relier les deux tableaux. Le problème est que je suis bloqué dans la façon de récupérer le post-id de chaque élément du répéteur, de sorte que lorsque je fais une insertion dans la table des commentaires, je peux l'inclure et ensuite récupérer tout ensemble.Obtention d'ID depuis le répéteur

Ceci est mon code correspondant derrière:

public void postear() 
{ 
    string emailcc = Session["EMAIL"].ToString(); 
    string user_id = Session["ID"].ToString(); 
    string usrnom = Session["NOMBRE"].ToString(); 
    string usrfoto = Session["FOTO_URL"].ToString(); 

    string post_contenido = txtpublica.Text.ToString(); 
    var post_fecha = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 

    using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexionBD"].ConnectionString)) 
    { 
     using (SqlCommand cmd = new SqlCommand()) 
     { 
      cmd.CommandType = CommandType.Text; 
      cmd.CommandText = (@"INSERT INTO MIEMBROS_Posts (POST_USER_ID, POST_CONTENIDO, POST_FECHA, POST_USER_NOMBRE, POST_USER_FOTO) VALUES ('" 
      + user_id + "','" + post_contenido + "','" + post_fecha + "','" + usrnom + "','" + usrfoto + "');"); 
      cmd.Connection = conn; 
      conn.Open(); 
      int rowsAffected = cmd.ExecuteNonQuery(); 
     } 
    } 
    txtpublica.Text = ""; 
    traerposts(); 
} 



public void comentar() 
{ 
    string emailcc = Session["EMAIL"].ToString(); 
    string user_id = Session["ID"].ToString(); 
    string usrnom = Session["NOMBRE"].ToString(); 
    string usrfoto = Session["FOTO_URL"].ToString(); 

// This is the problem area 
    foreach (RepeaterItem item in Repeater_UsrPosts.Items) 
    { 
     Label lbluserID = (Label)item.FindControl("lbluserid"); 
     string userid_post = lbluserID.Text; 
    } 

    string buscaid = (string)Repeater_UsrPosts.Items[lblid].FindControl("lbluserid"); 

    string COMM_contenido = txtpublica.Text.ToString(); 
    var COMM_fecha = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 


    using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexionBD"].ConnectionString)) 
    { 
     using (SqlCommand cmd = new SqlCommand()) 
     { 

      cmd.CommandType = CommandType.Text; 
      cmd.CommandText = (@"INSERT INTO MIEMBROS_Comments (COMM_USER_ID, COMM_CONTENIDO, COMM_FECHA, COMM_USER_NOMBRE, COMM_USER_FOTO, COMM_POST_ID) VALUES ('" 
      + user_id + "','" + COMM_contenido + "','" + COMM_fecha + "','" + usrnom + "','" + usrfoto + "','" + userid_post + "');"); 
      cmd.Connection = conn; 
      conn.Open(); 
      int rowsAffected = cmd.ExecuteNonQuery(); 
     } 
    } 
    txtpublica.Text = ""; 
    traerposts(); 
} 

Et ASPX:

<asp:Repeater ID="Repeater_UsrPosts" runat="server"> 
    <ItemTemplate> 

     <!-- Post --> 
     <div class="post clearfix"> 
      <div class="user-block"> 

       <asp:Label ID="lblid" runat="server" Text="<%#Eval("post_user_id")%>"></asp:Label> 
       <img alt="" src="<%#Eval("post_user_foto")%>" class="img-circle img-bordered-sm" /> 

       <span class="username"> 
        <a href="#"><%#Eval("post_user_nombre") %></a> 
        <a href="#" class="pull-right btn-box-tool"><i class="fa fa-times"></i></a> 
       </span> 
       <span class="description"><%#Eval("post_fecha") %></span> 
      </div> 
      <!-- /.user-block --> 

      <p> 

       <%#Eval("post_contenido") %> 
      </p> 

      <form class="form-horizontal"> 
       <div class="form-group margin-bottom-none"> 
        <div class="col-sm-9"> 
         <input class="form-control input-sm" placeholder="Respuesta"> 
        </div> 
        <div class="col-sm-3"> 
         <button type="submit" class="btn btn-danger pull-right btn-block btn-sm">Enviar</button> 
        </div> 
       </div> 
      </form> 
     </div> 
     <!-- /.post --> 
    </ItemTemplate> 
</asp:Repeater> 
+0

Vous devriez vraiment regarder dans les requêtes paramétrées. Votre code est très vulnérable à l'injection SQL. De plus, vous avez plusieurs balises 'form' sur la page, cela ne marchera jamais avec aspnet. Voir http://www.developer.com/net/asp/article.php/3609466/ASPNET-Tip-Responding-to-the-Repeater-Controls-ItemCommand-Event.htm – VDWWD

Répondre

2

Un exemple très rapide. Cela utilise un bouton avec un OnCommand. Avec cela, vous pouvez envoyer un CommandArgument et un CommandName. Dans le répéteur, vous pouvez lier un champ à CommandArgument et le relire dans la méthode.

<asp:Repeater ID="Repeater1" runat="server"> 
    <ItemTemplate> 
     <%# Eval("myName") %> - <asp:Button ID="Button1" runat="server" Text="Button" 
      OnCommand="Button1_Command" CommandName="myCommand" 
      CommandArgument='<%# Eval("ID") %>' /> 
     <br /> 
    </ItemTemplate> 
</asp:Repeater> 
code

derrière

protected void Button1_Command(object sender, CommandEventArgs e) 
{ 
    if (e.CommandName == "myCommand") 
    { 
     Label1.Text = e.CommandArgument.ToString(); 
    } 
} 

Ne pas oublier de supprimer ces <form class="form-horizontal"> balises.