日期:2014-05-16  浏览次数:20451 次

为何获取不到用户在templatefield中的textbox中输入的值?
要实现的功能很简单,就是把DetailsView中用户修改后的数据保存到数据库。前台代码是一个DetailsView控件,其中templatefield部分的代码如下:
<asp:TemplateField HeaderText="黑白名单">
                <EditItemTemplate>
                    <asp:TextBox ID="BlackAndWhite" runat="server" TextMode="MultiLine" Wrap="true"  Text='<%#Bind("BlackAndWhite")%>'></asp:TextBox>
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:TextBox ID="BlackAndWhite" runat="server" TextMode="MultiLine" Wrap="true"  Text='<%#Bind("BlackAndWhite")%>'></asp:TextBox>
                </ItemTemplate>
            </asp:TemplateField>

DetailsView下面有一个按钮:
<asp:Button ID="modifyButton" runat="server" Text="修改" Visible="false"
        onclick="modifyButton_Click" />
对应的后台处理事件:
protected void modifyButton_Click(object sender, EventArgs e)
    {
        using (VOTEDATAEntities myEntities = new VOTEDATAEntities())
        {
            Task aTask = myEntities.Tasks.SingleOrDefault(tt => tt.TaskName == taskName);
            aTask.BlackAndWhite = ((TextBox)DetailsView1.FindControl("BlackAndWhite")).Text;
            int result = myEntities.SaveChanges();
        }
    }

经过调试,(TextBox)DetailsView1.FindControl("BlackAndWhite")可以取到TextBox控件,但是其Text始终是页面初始化时的Text,而不是用户修改后的Text。
------解决方案--------------------
pageload事件中,加上IsPostBack的判断,否则一切都重来