2017-07-03 8 views
0

私はリピータ要素内のテキストボックスからポストコメント形式でローカルデータベースにコンテンツを挿入しようとしています。これまでは、特定のテキストボックスを見つけるために生成されたすべての行をループしてみましたが、不運にもかかわらず、挿入が空になったり、既存の行ごとに1つの挿入が得られたり、別の投稿を通じてRepeater - データベースへのテキストボックスの内容C#

私は最終的にitemfinderに投稿IDを渡そうとしましたが、うまく機能していますが、テキストボックスからの "comm_contenido"の挿入はまだデータベースには空になります。

私の質問は、Repeater内からこれらの種類の挿入物を処理するのは正確でより直接的な方法ですか?

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

リピータコードへのロードを示します。すべての投稿に読み込まれていますか?ところで、いったん動作させると、一歩前進してコード内にSQLインジェクションが存在しないようにする必要があります。 – bradbury9

+0

テキストボックスはすべての投稿に読み込まれています。そして、ありがとう、私はこの仕事を取得するとすぐにそれを行うでしょう。 – Ghaamae

+0

すべての投稿には読み込まないでください。データロードイベントの後に 'Button1_Command'イベントが発生した場合、私は' Page_Load'とみなし、ユーザーが挿入したデータは失われます。データを一度だけロードし、 'Page.IsPostback'プロパティをチェックします。編集:ちょうどIsPostBackを参照して答えを読んで...オマールの答えをチェックしてください:-) – bradbury9

答えて

0

これは、特定のテキストボックスの場所を特定し、不要なデータを投稿するのを防ぐための変更でした。

の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(); 

    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" にプロパティを追加しました。

最後に、最も重要なのは、onloadイベントに(!Page.IsPostBack)を追加した場合、私はを追加しました。

これらすべてを合わせて、各投稿のコメントが正しく挿入されています。

1

あなたがそれにOnTextChangedを割り当てることによってTextBoxコントロールに到達することができ、あなたがデータに到達したい場合は、また、そのAutoPostBacktrueに割り当てることができますすぐに。

ただし、データをリピータにバインドする前にif(!IsPostBack)を使用する必要があります。したがって、データに到達する前にControlsをリセットすることはありません。

OnTextChangedは、そのうちの一つは、それを呼び出しているsenderオブジェクトである、それはあなたのTextBoxだ、コード

protected void TextBoxExample_OnTextChanged(object sender, EventArgs e) 
{ 
    TextBox txt = (TextBox) sender; 
    //Response.Write(txt.Text); 
    //or whatever you want to do with it. 
} 

の後ろ..

ASP

<asp:Repeater ID="RepeaterExample" runat="server"><ItemTemplate> 
    <asp:TextBox runat="server" ID="TextBoxExample" AutoPostBack="True" OnTextChanged="TextBoxExample_OnTextChanged"/> 
</ItemTemplate></asp:Repeater> 

のようなものを2パラメータを必要としますButton_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の値を取るの背後に、このような何かを...

ASP

<asp:Button runat="server" ID="ButtonExample" OnClick="ButtonExample_OnClick"/> 

..

text += txt.Text; 

希望、私は助けることができました。

+0

あなたの答えは別のシナリオに合っています、私はポストIDを持ってボタンコマンドを使用しているので、私のために働いていません。 – Ghaamae

関連する問題