遍历repeater得到第三方控件TextBox,目的是修改文本框中的值,点击保存时得到的值并不是当前所输入的值,而是数据源中的原值,也就是数据并未更新,怎么得到输入的新值?

解决方案 »

  1.   

    for (int j = 0; j < rptPublish.Controls.Count; j++)
                            {
                                TextBox txtContent = rptPublish.Controls[j].FindControl("txtContent") as TextBox;
                                
                                res.MessageContent = txtContent.Text;
                                dc.SaveChanges();
                                ui.Alert(this, "修改成功");
                            }
    我在点击保存时候,txtContent.Text的值还是原来那个,因为repeater还是之前那个数据源,有没有什么方法能得到你在文本框中新输入的值,
      

  2.   

    res.MessageContent=Request.Form[txtContent..UniqueID] 
      

  3.   

    string txt = Request.Form[txtContent.UniqueID];
    这样获取到时空值
      

  4.   

    string txt = Request.Form[txtContent.UniqueID];
    这样获取到时空值空值,你前台代码是怎么写的?
      

  5.   

    string txt = Request.Form[txtContent.UniqueID];
    这样获取到时空值空值,你前台代码是怎么写的?
       <asp:TextBox ID="txtContent" runat="server" TextMode="MultiLine" Width="605px" Height="220px"
                                   CssClass="inputTxt"></asp:TextBox>就很简单,repeater中一个文本框,后台给他赋值
       TextBox txtContent = (TextBox)(dl.FindControl("txtContent"));
       txtContent.Text = item.MessageContent;
      

  6.   

        <asp:Repeater ID="rp_01" runat="server" onitemdatabound="rp_01_ItemDataBound">
        <ItemTemplate>
        <asp:TextBox ID="txtContent" runat="server" TextMode="MultiLine" Width="605px" Height="220px"
                                   CssClass="inputTxt"></asp:TextBox>
        </ItemTemplate>
        </asp:Repeater>    protected void rp_01_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemIndex >= 0)
            {
                TextBox txtContent = (TextBox)e.Item.FindControl("txtContent");
                txtContent.Text = e.Item.ItemIndex.ToString();
            }
        }
        protected void Button1_Click1(object sender, EventArgs e)
        {
            for (int j = 0; j < rp_01.Controls.Count; j++)
            {
                TextBox txtContent = (TextBox)rp_01.Controls[j].FindControl("txtContent");
                string txt = Request.Form[txtContent.UniqueID];
                Response.Write("值" + j + "=" + txt + "<br/>");
            }
            Response.End();
        }
    我这里是可以取到值的啊
      

  7.   

     string txt = Request.Form[txtContent.UniqueID];获取他还是null
      

  8.   

    你用 TexBox 生成 Html的时候  name 会变 Request。Form 当然取不到 值
      

  9.   

                TextBox txtContent = (TextBox)rp_01.Controls[j].FindControl("txtContent");
                string txt = Request.Form[txtContent.UniqueID];这个联起来写?
      

  10.   

    说了 会变啊 楼主你 生成页面 然后 查看 源文件 看看 Textbox的 控件 name  这个 是 有规律的 你可以看看 ,看了 再去 获取 你要的 值
      

  11.   

      <asp:TextBox ID="txtContent" runat="server" TextMode="MultiLine" Width="605px" Height="220px"
                                   CssClass="inputTxt"></asp:TextBox>
    生成以后是textarea
    如果我直接用input,我要怎么现在repeater中找到他?
      

  12.   

      <asp:TextBox ID="txtContent" runat="server" TextMode="MultiLine" Width="605px" Height="220px"
                                   CssClass="inputTxt"></asp:TextBox>
    生成以后是textarea
    如果我直接用input,我要怎么现在repeater中找到他?
    for (int j = 0; j < rptPublish.Controls.Count; j++)                         {                             
          TextBox txtContent = rptPublish.Controls[j].FindControl("txtContent") as TextBox;         
          string txt = Request.Form[txtContent.UniqueID];
          Response.Write("控件:" + txtContent.UniqueID + "=" + txt + "<br/>");

    Response.End()
    这样看看出来的是什么?
      

  13.   

    出现个这:控件:rptPublish$ctl00$txtContent=可是 string txt = Request.Form[txtContent.UniqueID];还是为null
      

  14.   

    忘了说了,是在page_load事件里面的
      

  15.   


    for int i=0 i<rep1.items.count  i++
     textbox t=rep1.items[i].findcontrol("txtContent") as textbox;
     resp.write(t.text);
    手写的可能有错误,,一直这个模式  从来没有错误..
      

  16.   

    我用了两种方法:
    1.通过LinkButton的按钮事件;
    2.通过<a></a>标签在page_load事件中通过参数
      

  17.   


    那你怎么提交和判断提交的?
    TextBox txtContent = rptPublish.Controls[j].FindControl("txtContent") as TextBox;
    提交的时候寻找这个控件,还是从原数据源的那个repeater中FindControl,他获取到的还是原来的数据,
    我觉得现在是要给获取到的这个文本框重新赋值就就可以。问题就是,此刻你获取不到你新输入的值?
      

  18.   


    那你怎么提交和判断提交的?
    TextBox txtContent = rptPublish.Controls[j].FindControl("txtContent") as TextBox;
    提交的时候寻找这个控件,还是从原数据源的那个repeater中FindControl,他获取到的还是原来的数据,
    我觉得现在是要给获取到的这个文本框重新赋值就就可以。问题就是,此刻你获取不到你新输入的值?当然是提交的时候找了,不提交是不会有Request.Form的,所以关键你的type是怎么来的,是Request.Form[]还是Request.QueryString[],这个很关键
      

  19.   


    那你怎么提交和判断提交的?
    TextBox txtContent = rptPublish.Controls[j].FindControl("txtContent") as TextBox;
    提交的时候寻找这个控件,还是从原数据源的那个repeater中FindControl,他获取到的还是原来的数据,
    我觉得现在是要给获取到的这个文本框重新赋值就就可以。问题就是,此刻你获取不到你新输入的值?当然是提交的时候找了,不提交是不会有Request.Form的,所以关键你的type是怎么来的,是Request.Form[]还是Request.QueryString[],这个很关键
    <a href="Edit.aspx?type=savezhu&MsgID=<%#Eval("MessageID") %>&MemID=<%#Eval("MemberID") %>">
    save</a>
      

  20.   

    string type = Request.QueryString["type"];
      

  21.   

    这个肯定是不行的,因为每次都是新的页面,rptPublish已经不是之前的rptPublish了
      

  22.   

    没有,他是同一个页面,rptPublish还是之前那个,你在获取文本框的值,他得到的还是原来的那个,没法得到新输入的。
      

  23.   

    小女子愚钝,能不能说细一点,谢谢需要用服务器控件来执行
    我用了LinkButton
        protected void lblPublish_Click(object sender, EventArgs e)
        {
            //MessageID
            MsgID = Convert.ToInt32(des.Decrypt(Request["MsgID"]));
            var res = (from a in dc.VM_INT_Message
                       where a.MessageID == MsgID
                       select a).FirstOrDefault();
            if (res != null)
            {
                ////foreach (RepeaterItem dl in rptPublish.Items)
                ////{
                for (int j = 0; j < rptPublish.Controls.Count; j++)
                {
                    TextBox txtContent = rptPublish.Controls[j].FindControl("txtContent") as TextBox;
                    res.MessageContent = txtContent.Text;
                    //TextBox txtContent = (TextBox)(dl.FindControl("txtContent"));
                    //res.MessageContent = txtContent.Text;
                    dc.SaveChanges();
                    ui.Alert(this, "修改成功");
                }
            }
        }
    还是不行的
      

  24.   

    - - !
     res.MessageContent = txtContent.Text;
    改成
      res.MessageContent=Request.Form[txtContent.UniqueID];
      

  25.   

    小女子愚钝,能不能说细一点,谢谢需要用服务器控件来执行
    谢谢你的提醒,我弄出来了;
     TextBox txtContent = rptPublish.Controls[j].FindControl("txtContent") as TextBox;
                    string txt = Request.Form[txtContent.UniqueID];
                    res.MessageContent = txt;
                    txtContent.Text = res.MessageContent;
                    dc.SaveChanges();
                    ui.Alert(this, "修改成功");
    这样就可以了。