我有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
}
答案 0 :(得分:3)
在每个postback
中,您总是从数据库中获取旧值。解决方案是检查页面是否第一次呈现( !IsPostBack
),然后设置MainFormTemplate
&#39; s DataSource
如果正在加载以回复回发( 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
}
答案 1 :(得分:1)
每Page_Load
执行postback
,您总是从数据库(?)写入值,并且从浏览器发送的值丢失(尽管仍然存在于Page.Request.Form
成员中)。
答案 2 :(得分:1)
在ASP.NET中,提交页面时,Page_Load
事件在按钮单击事件之前运行。因此,在click事件查看该值之前,textbox
值将以其原始值重新填充。
如果是这种情况,那么您可以将if值赋值的代码包装到if块中的textbox
:
if (!IsPostBack)
{
HtmlInputText twt = (HtmlInputText)MainFormTemplate.FindControl("txt_Name");
string text = twt.Value;
}
希望这会对你有所帮助。