我有一个FormViewwith data(DataSource,DataBind),我用填充 value='<%# Eval("Name") %>',但是在更改文本TextBox并按“更新”按钮后,我看到的值与以前相同,但看不到键入的新值。
FormView
DataSource
DataBind
value='<%# Eval("Name") %>'
TextBox
我在这里想念的是什么?
我的HTML
<asp:FormView ID="MainFormTemplate" runat="server"> <ItemTemplate> <li class="li_result" runat="server"> <div class="col-3"> <input id="txt_Name" runat="server" value='<%# Eval("Name") %>'> </div> </li> </ItemTemplate> </asp:FormView> <asp:Button id="btn_Update" runat="server" OnClick="btn_Update_Click" Text="Update" />
服务器端
protected void Page_Load(object sender, EventArgs e) { using (DB_MikaDataContext data = new DB_MikaDataContext()) { MainFormTemplate.DataSource = data.File_Projects.Where(x => x.Num_Tik.Equals("12")).ToList(); MainFormTemplate.DataBind(); } } public void btn_Update_Click(object sender, EventArgs e) { //using System.Web.UI.HtmlControls HtmlInputText twt = (HtmlInputText)MainFormTemplate.FindControl("txt_Name"); string text = twt.Value;//i see old value ,not new one that i typed in text box }
在每一个中postback,您总是从数据库中获取旧值。解决方案是检查页面是否是首次呈现( !IsPostBack ),然后在响应回发()进行加载时设置您MainFormTemplate的,DataSource否则将 IsPostBack 获得txt_Name的值,如下所示:
postback
!IsPostBack
MainFormTemplate
IsPostBack
txt_Name
HtmlInputText twt; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { using (DB_MikaDataContext data = new DB_MikaDataContext()) { MainFormTemplate.DataSource = data.File_Projects.Where(x => x.Num_Tik.Equals("12")).ToList(); MainFormTemplate.DataBind(); } } else { twt = MainFormTemplate.FindControl("txt_Name") as HtmlInputText; } } protected void btn_Update_OnClick(object sender, EventArgs e) { string text = twt.Value; // You will get the new value }