代码有点长,拜托大家耐心看完!
结构如下:
<asp:Repeater ID="Repeater_reply" runat=server>
  <ItemTemplate>
    <div class="word_content_bottom"><asp:TextBox id="TextBox_reply" runat=server BorderWidth=0 ReadOnly=true BackColor=#f3f3f3 Text=<%#DataBinder.Eval(Container.DataItem,"content") %>></asp:TextBox>
    <asp:LinkButton ID="LinkButton_word_content_bottom_update" Text="修改" CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Update_reply" runat=server></asp:LinkButton>
<asp:LinkButton ID="LinkButton_reply_sure" Text="确定" Visible=false CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Sure_reply" runat=server></asp:LinkButton>                        
<asp:LinkButton ID="LinkButton_reply_cancel" Text="取消" Visible=false CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Cancel_reply" runat=server></asp:LinkButton>
<asp:LinkButton ID="Confirmbutton_word_content_bottom" Text="删除" CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Delete_reply" runat="server"></asp:LinkButton>
 </div>
  </ItemTemplate>
</asp:Repeater>代码如下:
protected void Update_reply(object sender, System.Web.UI.WebControls.CommandEventArgs e)
{
  //这里放更新事件,主要改变空间的visiable属性,让LinkButton_reply_sure显示出来
}
protected void Sure_reply(object sender, System.Web.UI.WebControls.CommandEventArgs e)
{
   //这个是确定事件,在这里获取TextBox_reply的值,并且更新到数据库中
}问题如下:
获取不到修改后的TextBox_reply的值,而只是修改之前的值
这改如何处理呢?

解决方案 »

  1.   

    1 首先我认为用 datalist 把确定和取消  放到 编辑模版 里面比较方便;获取不到修改后的TextBox_reply的值,而只是修改之前的值this.TextBox1.EnableViewState==true;  把试图设为 true;试一试吧!
      

  2.   

    我用repeater主要是考虑到效率的问题
    个人认为repeater比datalist效率要高得多textbox的属性默认好像就是enableviewstate = ture的吧,我试下了,呵呵
      

  3.   

    修改了enableviewstate属性,还是不可以
      

  4.   

    如果一个控件不放在模版列里面,使绝对可以获取修改后的值的
    现在利用command事件获取不到,也真是让我郁闷的要命
      

  5.   

    我在Update_reply()事件里面,也就是电击确定按钮的时候把readonly修改为false了
      

  6.   

    现在的问题是点击“确定”按钮的时候,好像是先执行pageindexchanged事件,而后执行command 事件,因为重新绑定了一次,所以就获取不到最新的值!具体原因不是很清楚,这该咋办呢?
      

  7.   

    在页面回调,page_load事件中,有没有再次读取绑定的数据
      

  8.   

    我的bind函数这样写的
    if(!Page.Ispostback)
    {
       bind();
    }
    所以应该不存在那个问题吧
      

  9.   

    pageindexchanged事件对于重复列表控件,没有啊.
      

  10.   

    是必须执行  pageindexchanged  吗? 如果是 那只能加入判断了!如果不是.  但是点击确定 激发事件的 的那句话给它删了this.Button1.Click += new System.EventHandler(this.Button1_Click);  之类的话!
      

  11.   

    我这里还用到了pageindexchanged事件、repeater的itemdatabind事件
    好像pageindexchanged、itemdatabind要比command事件先执行?
      

  12.   

    如果不是必要, 就不让他执行  pageindexchanged 了!
      

  13.   

    private void InitializeComponent()
    {
                
    }
    这里面没有写句柄,因为控件在repeater的模版列中,所有都是根据id获取的
    pageindexchanged不是必须的
      

  14.   

    如果换datalist,那我以前做的工作不是白费了嘛,55555555
    哎呀,有没有其他的办法呢,我不想用datalist做好的编辑功能啊
      

  15.   

    先看看为什么会执行 pageindexchanged,这个我就看不出来了,
    如果从侧面解决 你只要加入 if(e.CommandName=="Sure_reply") return;等缺德方法了!  直接_ItemCommand 里面执行你的流程不好吗?
      

  16.   

    只有只有"artoksxb(天天泡CSDN)"、"zhangzengping() "愿意提供帮助,其他高手别闲着阿
    帮帮我哦
      

  17.   

    我认为ReadOnly=true
    如果是这样的情况到我的博客看一下
    http://blog.csdn.net/shixin1198/archive/2006/10/08/1325560.aspx
      

  18.   

    按照"zhangzengping()"的方法还是不可以
    我以前说的有点错误,就是pageindexchanged事件是必须的
    现在我发现pageindexchanged、itemdatabind事件比command事件先执行,这样的话,虽然每次都修改了textbox的text,但是点击"确定"按钮的时候,先执行itemdatabind事件,这样又改回了原来的样子,所以每次都修改不成功。
    现在的话,只要让commnand在itemdatabind之前执行就可以了,或者第一次进页面的时候执行itemdatabind,然后把数据缓存起来,以后不执行itemdatabind事件,这样就可以了,但是我不知道如何做,高手请帮忙
      

  19.   

    加在itemdatabind 事件里 
     if(!this.IsPostBack)
     {
       Command(sender,e);
     }
      

  20.   

    打错了 
     if(this.IsPostBack)
     {
       Command(sender,e);
     }
      

  21.   

    放在if(!this.IsPostBack)
    {
    }
    楼主做人不厚道
      

  22.   

    同上.IsPostBack()
    LZ遇到问题自己先单步跟踪一下就知道.
      

  23.   

    现在我想到一个方法,只是实现起来还是有点难度
    因为我的程序是repeater里面套了一个repeater,下面第一个repeater称为r1,第二个称为r2
    我想在在r1的itemdatabind事件中获取r2中的textbox,如何做呢?
      

  24.   

    我遇到过相同的问题
    用Request获取表单值可以解决问题
    我分析的原因是页面加入了片断缓存
      

  25.   

    to wfyfngu(SecureCRM):能否把具体方法帖出来呢,我看得不是很明白
      

  26.   

    取不到值可能是因为!this.IsPostBack回发的问题,因为当你点确定的时候又走了一遍itemdatabind事件,那就说明你又绑定了一次,你再仔细查看一下。还有再问一下,你这个是写在用户控件里还是直接写在页面里?建议是写在页面里试下看,因为即使你在控件里判断了回发,但是在页面还是会回发的,所以你取不到更新后的值。我以来也遇到这类似的问题,基本都是IsPostBack没有判断正确
      

  27.   

    <div class="food_message_detail_bottom">
    <asp:Label ID="Label_xiangxi" runat=server></asp:Label>
    </div>
    </div>
    </div>
    </div>
    <div class="leaveword">
    <div class="word">
    <div class="word_biao"></div>
    <div class="word_content">
    <cc1:pager_repeater id="Pager_repeater_leaveword" runat="server" PageSize="5" OnPageIndexChanged="Pager_repeater_leaveword_PageIndexChanged" OnItemDataBound="Pager_repeater_leaveword_ItemDataBound">
        <ItemTemplate>
            <div class="word_content_top">
                <span class="liuyanren">
                <font color=#0073bd>留言人:</font><%#DataBinder.Eval(Container.DataItem,"leaver") %>
                </span>
                <span class="liuyanshijian">
                <font color=#0073bd>留言时间:</font><%#DataBinder.Eval(Container.DataItem,"time_add") %>
                </span>
            </div>
            <div class="word_content_middle">
                <font color=#0073bd>留言内容:</font><%#DataBinder.Eval(Container.DataItem,"content") %>
                <asp:Label ID="Label_id_word" Text=<%#DataBinder.Eval(Container.DataItem,"id") %> runat=server Visible=false></asp:Label>
            </div>
            <div id="word_content_change" class="word_content_change" runat=server visible=false>
                <span class="word_content_reply">[</span>
                <span class="word_content_reply" id="word_content_reply">
                                        <asp:LinkButton ID="LinkButton_word_content_reply" Text="回复" OnCommand="Word_reply" CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> runat=server></asp:LinkButton>
                </span>
                <span class="word_content_reply">|</span>
                <span class="word_content_reply" id="word_content_delete">
                    <cc1:confirmbutton ID="Confirmbutton_word_content" Text="删除" CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Delete_word" runat="server"></cc1:confirmbutton>
                    </span>
                    <span class="word_content_reply">]</span>
            </div>
            <div class="word_content_reply">
                <asp:Repeater ID="Repeater_reply" runat=server>
                    <ItemTemplate>
                       <div class="word_content_bottom">
                            <font color=#0073bd>回复:</font><asp:TextBox id="TextBox_reply" runat=server BorderWidth=0 EnableViewState=true Width=560 ReadOnly=true BackColor=#f3f3f3 Text=<%#DataBinder.Eval(Container.DataItem,"content") %>></asp:TextBox>
                            &nbsp;&nbsp;(<b>回复人</b>:<font color=#aaaaaa><%#DataBinder.Eval(Container.DataItem, "replyer")%></font>)
                       </div>
                       <div class="word_content_bottom_change" runat=server>
                            <span class="word_content_reply">[</span>
                            <span class="word_content_reply" id="word_content_bottom_update">
                                <asp:LinkButton ID="LinkButton_word_content_bottom_update" Text="修改" CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Update_reply" runat=server></asp:LinkButton>
                            </span>
                            <span class="word_content_reply" id="span_jiange1"  runat=server>|</span>
                            <span class="word_content_reply" id="Span_reply_sure">
                                <asp:LinkButton ID="LinkButton_reply_sure" Text="确定" Visible=false CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Sure_reply" runat=server></asp:LinkButton>
                            </span>
                            <span class="word_content_reply" id="span_jiange2" visible="false" runat=server>|</span>
                            <span class="word_content_reply" id="Span_reply_cancel">
                                <asp:LinkButton ID="LinkButton_reply_cancel" Text="取消" Visible=false CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Cancel_reply" runat=server></asp:LinkButton>
                            </span>
                            <span class="word_content_reply" id="sapn_jiange3" visible=false runat=server>|</span>
                            <span class="word_content_reply" id="word_content_botton_delete">
                                <cc1:confirmbutton ID="Confirmbutton_word_content_bottom" Text="删除" CommandName=<%#DataBinder.Eval(Container.DataItem,"id")%> OnCommand="Delete_reply" runat="server"></cc1:confirmbutton>
    </span>
                            <span class="word_content_reply">]</span>
                       </div>
                    </ItemTemplate>
                </asp:Repeater>
            </div>
            <div class="jiange"></div>
        </ItemTemplate>
    </cc1:pager_repeater>
    </div>
    </div>
    <div class="leave">
    <div class="leave_left">我要留言:</div>
    <div class="leave_right">
    <asp:TextBox ID="TextBox_leave" Runat="server" TextMode="MultiLine" BorderWidth="1px" BorderColor="#A5CEFF"></asp:TextBox>
    <asp:Button ID="Button_sure" Runat="server" Text="确定" OnClick="Button_sure_Click"></asp:Button>&nbsp;&nbsp;&nbsp;&nbsp;
    <asp:Button ID="Button_cancel" Runat="server" Text="取消" OnClick="Button_cancel_Click"></asp:Button><br>
    </div>
    </div>
    </div>
    </div>
    <uc_bottom:bottom id="Top2" runat="server"></uc_bottom:bottom></form>
    </body>
    </HTML>
      

  28.   

    cs的代码:
    protected void Page_Load(object sender, System.EventArgs e)
    {           
                if (!Page.IsPostBack)
                {
                    if (Request.QueryString["id"] == null && Request.QueryString["page"] == null)
                    {
                        Response.Redirect("error.aspx");
                        return;
                    }
                    this._ID = Convert.ToInt32(Request.QueryString["id"]);
                    this.Bind_food_message();
                }
                if (Request.Cookies["user"] == null)
                    this.Leaver = "游客";
                else
                    this.Leaver = Request.Cookies["user"].Values["username"];
    }
    #region 留言确定事件
            protected void Button_sure_Click(object sender, EventArgs e)
            {
                int count = 0;
                string content = string_deal.InputText(this.TextBox_leave.Text, 1000);            food x = new food(this._ID);            count = food_leaveword.Insert(this._ID, x.Name, x.Shop_id, this.Leaver, content);
                if (count > 0)
                {
                    Response.Redirect("food_detail.aspx?id=" + this._ID + "");
                    this.TextBox_leave.Text = "";
                }
                else
                {
                    Response.Write("<script>alert('抱歉,发表失败!');location.href='food_detail.aspx?id=" + this._ID + "'</script>");
                }
            }
            #endregion        #region 留言取消事件
            protected void Button_cancel_Click(object sender, EventArgs e)
            {
                this.TextBox_leave.Text = "";
            }
            #endregion        #region pager_repeater 的pageindexchanged事件
            protected void Pager_repeater_leaveword_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
            {
                System.Data.DataView dv = food_leaveword.Food_leaved_id(this._ID);
                this.Pager_repeater_leaveword.CurrentPageIndex = e.NewPageIndex;
                this.Pager_repeater_leaveword.DataSource = dv;
                this.Pager_repeater_leaveword.DataBind();
            }
            #endregion        #region pager_repeater的itemdatabind事件
            protected void Pager_repeater_leaveword_ItemDataBound(object sender, RepeaterItemEventArgs e)
            {
                Label Label_id_word = (Label)e.Item.FindControl("Label_id_word");
                Repeater Repeater_reply = (Repeater)e.Item.FindControl("Repeater_reply");            if (Label_id_word != null)
                {
                    int id = Convert.ToInt32(Label_id_word.Text);
                    Repeater_reply.DataSource = food_word_reply.Food_reply_id_leave(id);
                    Repeater_reply.DataBind();
                }
                if (Request.Cookies["user"] != null && Request.Cookies["user"].Values["flag"] == "0")
                {
                    System.Web.UI.HtmlControls.HtmlGenericControl Div_word_content_change = (HtmlGenericControl)e.Item.FindControl("word_content_change");
                    if (Div_word_content_change != null)
                    {
                        Div_word_content_change.Visible = true;
                    }
                }
            }
            #endregion
     #region 留言回复里面的更新事件
            protected void Update_reply(object sender, System.Web.UI.WebControls.CommandEventArgs e)
            {
                LinkButton LinkButton_reply = (LinkButton)sender;
                if (LinkButton_reply != null)
                {
                    TextBox_reply = (TextBox)LinkButton_reply.Parent.FindControl("TextBox_reply");
                    this.Content = string_deal.InputText(TextBox_reply.Text, 1000);
                    this.TextBox_reply.BorderWidth = 1;
                    this.TextBox_reply.Width = 560;
                    this.TextBox_reply.BorderStyle = BorderStyle.Dotted;
                    this.TextBox_reply.TextMode = TextBoxMode.MultiLine;
                    this.TextBox_reply.ReadOnly = false;                LinkButton_reply.Visible = false;
                    System.Web.UI.WebControls.LinkButton LinkButton_reply_sure = (LinkButton)LinkButton_reply.Parent.FindControl("LinkButton_reply_sure");
                    if (LinkButton_reply_sure != null)
                        LinkButton_reply_sure.Visible = true;
                    HtmlGenericControl span_jiange1 = (HtmlGenericControl)LinkButton_reply.Parent.FindControl("span_jiange1");
                    if (span_jiange1 != null)
                        span_jiange1.Visible = false;
                    HtmlGenericControl span_jiange2 = (HtmlGenericControl)LinkButton_reply.Parent.FindControl("span_jiange2");
                    if (span_jiange2 != null)
                        span_jiange2.Visible = true;
                    HtmlGenericControl sapn_jiange3 = (HtmlGenericControl)LinkButton_reply.Parent.FindControl("sapn_jiange3");
                    if (sapn_jiange3 != null)
                        sapn_jiange3.Visible = true;
                    LinkButton LinkButton_reply_cancel = (LinkButton)LinkButton_reply.Parent.FindControl("LinkButton_reply_cancel");
                    if (LinkButton_reply_cancel != null)
                        LinkButton_reply_cancel.Visible = true;       
                }           
            }
            #endregion        #region 留言回复里面的确定事件
            protected void Sure_reply(object sender, System.Web.UI.WebControls.CommandEventArgs e)
            {
                int id = Convert.ToInt32(e.CommandName);
                LinkButton LinkButton_reply = (LinkButton)sender;
                if (LinkButton_reply != null)
                {
                    int _count = 0;
                    food_word_reply z = new food_word_reply(id);                _count = z.Update(this.Content, this.Leaver);
                    if (_count > 0)
                    {
                        Response.Write("<script>alert('修改成功');location.href='food_detail.aspx?id=" + this._ID + "'</script>");
                    }
                    else
                    {
                        Response.Write("<script>alert('抱歉,修改失败!');location.href='food_detail.aspx?id=" + this._ID + "'</script>");
                    }
                }
            }
            #endregion
      

  29.   

    这是NET05的问题,03是没有这问题的。TextBox_reply 不能这样 readOnly ,你可以在后台动态加载readOnly:             this.TextBox_reply.Attributes.Add("readonly", "true");LZ,笑一个,我在项目中也4过了!
      

  30.   

    首先,非常感谢"lolenboy()"啊
    但是,我在后台添加readonly的时候,不管是把readonly设为true还是false,我在单步调试的时候都是false。还有我是在Update_reply()这个事件里面获取textbox并且给它添加readonly属性的
      

  31.   

    只有在Page_load事件中值能获取
      

  32.   

    to microjlb(microjlb) :
    如果你仔细看看我发的所有的代码就会发现,textbox是放在模版列中的重复列表控件,要在page_load中后去次textbox也不是一件容易的事情啊,至少我认为是比较困难!!
      

  33.   

    楼主是不是没有在PageLoad中用
    !IsPostBack判断一下是否是回调啊?否则每次都会初始化初值(从数据中读取)这时才会执行你button中的代码,更新的肯定也是原来的数据(也就是你所说的没有修改以前的)