Repeater - содержимое текстового поля в базу данных С#
0 Ghaamae [2017-07-04 00:48:00]
Я пытаюсь вставить содержимое в свою локальную базу данных из текстового поля внутри элемента ретранслятора в виде комментариев. До сих пор я пытался зацикливаться на всех сгенерированных строках, чтобы найти конкретное текстовое поле, но мне не повезло, либо вставка пуста, либо я получаю 1 вставку в существующую строку, или я получаю одно и то же значение, вставленное снова и снова через разные должности.
Я, наконец, попытался передать идентификатор сообщения в itemfinder, и он вроде работает, но вставки "comm_contenido" из текстового поля все еще пустуют в базу данных.
Мой вопрос в том, что это правильный и более прямой способ обработки таких вставок из репитера?.
С#:
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>
c# sql asp.net repeater
2 ответа
0 Решение Ghaamae [2017-07-04 20:01:00]
Это были изменения, которые работали для меня, чтобы найти конкретное текстовое поле и предотвратить публикацию нежелательных данных.
С#:
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();
var COMM_fecha = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
Control s = (Control)sender; TextBox tb = (TextBox)s.NamingContainer.FindControl("txtcomentar"); tb.ReadOnly = true;
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexionBD"].ConnectionString))
{
using (SqlCommand cmd = new SqlCommand())
{
string txt1 = tb.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();
}
}
traerposts();
}
А на ASP я добавил свойство EnableVIewState = "true" в текстовое поле, а также в ретранслятор.
Наконец, самое главное, я добавил if (! Page.IsPostBack) в событие onload.
И при этом вместе комментарии к каждому сообщению вставляются правильно.
1 Omar Hamza [2017-07-04 03:12:00]
Вы можете добраться до TextBox
управления TextBox
, назначив ему OnTextChanged
, и вы также можете присвоить его AutoPostBack
значение true
если вы хотите немедленно получить данные.
но вы должны использовать if(!IsPostBack)
прежде чем связывать свои данные с вашим ретранслятором, чтобы он не сбросил ваши Controls
до того, как вы смогли достичь данных.
OnTextChanged
нуждается в двух параметрах, один из них - объект sender
который вызывает его, что ваш TextBox
, что-то вроде..
ASP
<asp:Repeater ID="RepeaterExample" runat="server"><ItemTemplate>
<asp:TextBox runat="server" ID="TextBoxExample" AutoPostBack="True" OnTextChanged="TextBoxExample_OnTextChanged"/>
</ItemTemplate></asp:Repeater>
За кодом
protected void TextBoxExample_OnTextChanged(object sender, EventArgs e)
{
TextBox txt = (TextBox) sender;
//Response.Write(txt.Text);
//or whatever you want to do with it.
}
и если вы хотите использовать его с Button_OnClick
, вы должны использовать как глобальную строку, которую вы можете назвать позже, вы можете сделать что-то вроде этого..
ASP
<asp:Button runat="server" ID="ButtonExample" OnClick="ButtonExample_OnClick"/>
За кодом
private string text = "";
protected void TextBoxTest_OnTextChanged(object sender, EventArgs e)
{
TextBox txt = (TextBox)sender;
text = txt.Text;
}
protected void ButtonExample_OnClick(object sender, EventArgs e)
{
//Response.Write(text);
}
но последний метод примет значение последнего TextBox
, текст которого изменился, если вы не добавите его вместе, как..
text += txt.Text;
Надеюсь, я мог бы помочь..