Ich versuche, Inhalt in meine lokale Datenbank aus einem Textfeld in einem Repeater-Element, in einer Post-Kommentar-Art einfügen. Bis jetzt habe ich versucht, alle generierten Zeilen zu loopen, um das spezifische Textfeld zu finden, aber ich hatte kein Glück, entweder die Einfügung wird leer, oder ich bekomme 1 Einfügung pro bereits existierende Zeile, oder ich bekomme den gleichen Wert immer wieder eingefügt durch verschiedene Beiträge.Repeater - Textbox Inhalt in Datenbank C#
Ich habe schließlich versucht, die Post-ID an den Itemfinder zu übergeben und es funktioniert irgendwie, aber die "comm_contenido" -Einfügungen aus dem Textfeld werden immer noch leer in die Datenbank.
Meine Frage ist, was es ist die richtige und direktere Art, diese Art von Einsätzen von innerhalb eines Repeaters zu behandeln.
C#:
protected void Button1_Command(object sender, CommandEventArgs e)
{
string postid = e.CommandArgument.ToString();
string emailcc = Session["EMAIL"].ToString();
string user_id = Session["ID"].ToString();
string usrnom = Session["NOMBRE"].ToString();
string usrfoto = Session["FOTO_URL"].ToString();
//string COMM_CONTENIDO = lblcomm.Text.ToString();
var COMM_fecha = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
TextBox txt2;
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexionBD"].ConnectionString))
{
using (SqlCommand cmd = new SqlCommand())
{
int m = Int32.Parse(postid);
txt2 = (TextBox)Repeater_UsrPosts.Items[m].FindControl("txtcomentar");
string txt1 = txt2.Text;
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 + "','" + txt1 + "','" + COMM_fecha + "','" + usrnom + "','" + usrfoto + "','" + postid + "');");
cmd.Connection = conn;
conn.Open();
int rowsAffected = cmd.ExecuteNonQuery();
}
}
//txtpublica.Text = "";
traerposts();
}
ASP:
<asp:Repeater ID="Repeater_UsrPosts" runat="server" >
<ItemTemplate>
<!-- Post -->
<div class="post clearfix">
<div class="user-block">
<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>
<ul class="list-inline">
<li><a href="#" class="link-black text-sm"><i class="fa fa-share margin-r-5"></i>Share</a></li>
<li><a href="#" class="link-black text-sm"><i class="fa fa-thumbs-o-up margin-r-5"></i>Like</a>
</li>
<li class="pull-right">
<asp:LinkButton ID="bttnabrircomentarios" runat="server" class="link-black text-sm">
<i class="fa fa-comments-o margin-r-5"></i>Comments</asp:LinkButton>
</li>
</ul>
<asp:TextBox ID="txtcomentar" runat="server" class="form-control input-sm" placeholder="Escribe un comentario" EnableViewState="False"></asp:TextBox>
<%# Eval("post_id") %> -
<asp:Button ID="Button1" runat="server" Text="Button"
OnCommand="Button1_Command" CommandName="myCommand"
CommandArgument='<%# Eval("post_ID") %>' />
<br />
</div>
<!-- /.post -->
</ItemTemplate>
</asp:Repeater>
zeigen Sie das Laden in den Repeater-Code. Wird es in jedem Post geladen? BTW, sobald Sie es funktioniert haben, sollten Sie einen Schritt weiter gehen und die SQL-Injektion in Ihrem Code vermeiden. – bradbury9
Das Textfeld wird auf jeden Post geladen, ja. Und danke, ich werde es tun, sobald ich das funktioniere. – Ghaamae
Sie sollten es nicht auf jeden Post laden. Wenn das Ereignis 'Button1_Command' nach dem Datenladevorgang ausgelöst wird, nehme ich' Page_Load' an, dann gehen die vom Benutzer eingegebenen Daten verloren. Laden Sie die Daten nur einmal, überprüfen Sie die Eigenschaft 'Page.IsPostback'. Bearbeiten: Lesen Sie einfach die Antwort bezieht sich auf die IsPostBack ... Überprüfen Sie Omars Antwort :-) – bradbury9