值/文本更改服务器端后,从文本框中获取文本/值
我有一个FormView
的数据( DataSource
,数据DataBind
),我填写value='<%# Eval("Name") %>'
,但是当我改变文本TextBox
,然后按更新button我看到相同的值以前,我不能看到我input的新的价值。
我在这里错过了什么?
我的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
得到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 }
在ASP.Net中,提交页面时,Page_Load事件在button单击事件之前运行。 因此,在click事件查看该值之前,textbox值将被重新填充为其原始值。
如果是这种情况,那么你可以把代码分配给一个if块中的文本框,如下所示:
if (!IsPostBack) { HtmlInputText twt = (HtmlInputText)MainFormTemplate.FindControl("txt_Name"); string text = twt.Value; }
希望这可以帮助你
使用Page_Load
执行每次postback
,您总是从数据库(?)写入值,并且从浏览器发送的值将丢失(尽pipePage.Request.Form
成员仍然存在)。