文本框在回发时失去价值

我的网页上有大约4个文本框…有些是asp:文本框,有些是输入类型=“文本”。

输入文本框通过javascript弹出日历控件填充,而asp.net文本框通过键入填充。 从数据库中检索这些文本框的初始值。

当用户更改这些值时,不会保存它们,并且在单击提交按钮后清除文本框。 请帮助解决这个混乱。 谢谢。

谢谢你的回复,但它仍然没有工作…..

我把这段代码放在我的页面加载事件中

if (Page.IsPostBack) { if (ViewState["stock"] != null) TextBoxMaterial.Text = ViewState["stock"].ToString(); if (ViewState["supplier"] != null) TextBoxSupplier.Text = ViewState["supplier"].ToString(); if(ViewState["matTime"] != null) TextBoxMatTime.Text = ViewState["matTime"].ToString(); if(ViewState["prodTime"] != null) TextBoxProdTime.Text = ViewState["prodTime"].ToString(); if (ViewState["shipTime"] != null) TextBoxShipTime.Text = ViewState["shipTime"].ToString(); if(ViewState["cmr"] != null) cmrDue.Value = ViewState["cmr"].ToString(); if(ViewState["kc"] != null) kcDue.Value = ViewState["kc"].ToString(); } 

并将以下代码放在按钮的onclick事件中

 ViewState["stock"] = TextBoxMaterial.Text; ViewState["supplier"] = TextBoxSupplier.Text; ViewState["matTime"] = TextBoxMatTime.Text; ViewState["prodTime"] = TextBoxProdTime.Text; ViewState["shipTime"] = TextBoxShipTime.Text; ViewState["cmr"] = cmrDue.Value.ToString(); ViewState["kc"] = kcDue.Value.ToString(); string prodLine = DDProdLine.SelectedValue; string stock1 = DDMaterial.SelectedValue; string stock2 = ViewState["stock"].ToString(); string supplier = ViewState["supplier"].ToString(); string billet = RBBillet.SelectedValue; string matTime1 = ViewState["matTime"].ToString(); string matTime2 = DDMatTime.SelectedValue; string prodTime1 = ViewState["prodTime"].ToString(); string prodTime2 = DDProdTime.SelectedValue; string shipTime1 = ViewState["shipTime"].ToString(); string shipTime2 = DDShipTime.SelectedValue; CultureInfo cultureInfo = CultureInfo.CurrentCulture; string format = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern.ToString(); string cmr = ViewState["cmr"].ToString(); string kc = ViewState["kc"].ToString(); string x = cmr.Substring(3, 2); string y = cmr.Substring(0, 2); string z = cmr.Substring(6, 4); string x1 = kc.Substring(3, 2); string y1 = kc.Substring(0, 2); string z1 = kc.Substring(6, 4); string finalCmr = x + "/" + y + "/" + z; string finalKC = x1 + "/" + y1 + "/" + z1; DateTime dt = DateTime.ParseExact(finalCmr, format, cultureInfo); DateTime cr = DateTime.ParseExact(finalKC, format, cultureInfo); string custDate = dt.ToString("dd/mm/yyyy"); string kcDate = cr.ToString("dd/mm/yyyy"); string id = Request.QueryString["id"]; bool success = true; TextBoxProdComment1.Text = stock2 + "," + supplier + matTime1 + "," + prodTime1 + "," + shipTime1 + "," + custDate + "," + kcDate; try { success = CRTopButtons.SaveProdTable(id, prodLine, stock1, supplier, billet, matTime1, matTime2, prodTime1, prodTime2, shipTime1, shipTime2, custDate, kcDate); } catch (Exception e) { TextBoxProdComment2.Text = e.Message; System.Diagnostics.Trace.Write(e.StackTrace); } 

文本框仍然清晰,没有一个是readonly ……….

请帮忙

我遇到了类似的问题,本文的ViewState和Readonly属性最好地描述了“在回发期间通过javascript改变数据丢失”的解决方案。

例如,假设我们有这个asp.net控件:

  

如果您通过客户端的javascript更改此控件的值,它将不会通过服务器端的回发传播…无论您使用javascript做什么,除非您删除readonly =“true”。 现在有一个解决这个问题的方法,如上文所述。

简单地把它放在PageLoad事件中

 if (!IsPostBack) txtName.Attributes.Add("readonly","readonly"); 

你已经完成了 如果您的目的是禁用控件编辑,请不要忘记删除ReadOnly =“true”或Enable =“false”,只需使用上面的代码段即可。 如果你把它打开,别忘了删除Enable =“false”。

我遇到的另一件事……如果您正在使用ASP.NET TextBox控件(例如),并且它是READONLY或DISABLED,则回发将不会捕获更改的值。

根据我的问题,我通过javascript更改控件的值,即使浏览器呈现更改,在回发上,控件仍保留原始值。

似乎也是一个常见问题… javascript启动自定义ASCX日历控件,结果通过javascript注入文本框。 不应允许用户直接修改文本框值…

 string strDate = Request.Form["id_of_input_element"].ToString(); 

我最终使用了上面的内容,在回发后“重置”控件,它改变了价值!

  1. 回传后, 文本框不会保存其状态。 ASP.NET不会为您处理。

  2. 如果将代码放在Page_Load事件中以设置ASP.NET文本框的值,则不会保存回发的值,因为在ASP.NET页面生命周期中还primefaces控件状态后会发生Page_Load。 这些值已由ASP.NET恢复,但您将覆盖其还原的值。

  3. 修复#2的正确做法是在加载初始状态之前检查Page.IsPostBack ,如下所示:

     if ( !Page.IsPostBack ) { // set the textbox initial states from the database } 

更新:

有两种方法可以解决问题#1。 您可以做的一件事是使用Request.Form []集合手动检索发布的返回值,如下所示:

 string strDate = Request.Form["id_of_input_element"].ToString(); 

您可以做的另一件事,如果可以的话,这就是我建议将元素更改为ASP.NET文本框,并将任何客户端Javascript事件连接到该文本框。 然后ASP.NET将完全处理您的回发。

我在寻找相同类型问题的答案时找到了这个,现在我发现了我的问题,我认为它可以帮助其他人把它放在这里。

在我的情况下,我在我的控件的

中有一个标签

,所以,如果你没有用上面的方法解决你的问题,我会在你的

搜索一个

希望它对某些情况有帮助。

如果我让你要求正确,我认为你正试图让这些文本框只读。 如果是这样,我以前遇到过这个问题并通过使用C#而不是ASP.NET来使文本框只读,我只添加了像textboxName.Attributes.Add("readonly", "readonly"); 在Page_Load中它工作得很好。 我在Stackoverflow上找到了这个解决方案

而不是TextBoxPassword.Text=Password

使用

 TextBoxPassword.Attributes["value"]=Password 

您的视图状态似乎已被禁用。 在Page指令中启用viewstate。