C# 文本框在回发时失去价值
我的网页上有大约4个文本框…一些是asp:TextBox,而另一些是input type=“text” 输入文本框通过javascript弹出日历控件填充,而asp.net文本框通过键入填充。这些文本框的初始值从数据库中检索 当用户更改这些值时,在单击“提交”按钮后,这些值不会被保存,文本框将被清除。请帮助解决这一困惑。谢谢 谢谢你的回复,但它仍然不起作用 我已将此代码放入我的页面加载事件中C# 文本框在回发时失去价值,c#,javascript,asp.net,C#,Javascript,Asp.net,我的网页上有大约4个文本框…一些是asp:TextBox,而另一些是input type=“text” 输入文本框通过javascript弹出日历控件填充,而asp.net文本框通过键入填充。这些文本框的初始值从数据库中检索 当用户更改这些值时,在单击“提交”按钮后,这些值不会被保存,文本框将被清除。请帮助解决这一困惑。谢谢 谢谢你的回复,但它仍然不起作用 我已将此代码放入我的页面加载事件中 if (Page.IsPostBack) { i
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);
}
文本框仍然清除,没有一个是只读的
请帮助您的视图状态似乎已禁用。在页面指令中启用viewstate
文本框不会保存其状态。ASP.NET不会为您处理此问题Page.IsPostBack
,如下所示:
if ( !Page.IsPostBack )
{
// set the textbox initial states from the database
}
string strDate = Request.Form["id_of_input_element"].ToString();
if ( !Page.IsPostBack )
{
// set the textbox initial states from the database
}
string strDate = Request.Form["id_of_input_element"].ToString();
您可以做的另一件事,如果可以的话,我建议您将
元素更改为ASP.NET文本框,并将任何客户端Javascript事件连接到该文本框。然后ASP.NET将完全处理您的回发。我在寻找同一类型问题的答案时发现了这一点,现在我发现了我的问题,我认为它可以帮助其他人将其放在这里
在我的例子中,我的控件的
中有一个标签
,因此,如果您没有解决上述问题,我建议搜索
中丢失的
希望对某些情况有所帮助。我遇到的另一件事。。。如果您使用的是ASP.NET文本框控件(例如),并且它是只读或禁用的,回发将不会捕获更改的值 根据我的问题,我正在通过javascript更改控件的值,即使浏览器进行了更改,在回发时,控件仍保留原始值 似乎也是一个常见的问题。。。javascript启动自定义ASCX日历控件,结果由javascript注入文本框。不应允许用户直接修改文本框值
string strDate = Request.Form["id_of_input_element"].ToString();
我最终使用上面的方法,在回发之后,将控件“重置”为其更改的值 我遇到了一个类似的问题,解决方案是“在回发过程中丢失javascript更改的数据” 这篇文章最能说明这一点 例如,假设我们有一个asp.net控件:
<asp:TextBox ID="txtName" runat="server" EnableViewState= "false" ReadOnly="true" />
你完成了。只要不要忘记删除ReadOnly=“true”或Enable=“false”,如果您的目的是禁止编辑控件,只需使用上面的代码段即可。如果你打开了Enable=“false”,别忘了删除它。如果我知道你的要求是正确的,我想你是想让那些文本框成为只读的。如果是这样的话,我以前就遇到过这个问题,并通过使用C而不是ASP.NET使文本框只读来解决它,我只是添加了一些行,比如
textboxName.Attributes.Add(“readonly”,“readonly”)代码>在页面中加载,效果很好。我在这里找到的解决方案是在而不是TextBoxPassword.Text=Password
使用
你是如何拯救他们的?您能否用最少的代码重现问题并在此处共享该代码?标准输入控件是否在服务器上运行(即runat=“server”)?是否启用了viewstate?您可以添加javascript代码和页面加载代码吗?从数据库填充文本框的事件是什么?是在页面加载过程中吗?我猜您实际上是在页面加载中设置它们的值,从而清除回发上的值-如果(!IsPostBack),您可能需要添加一条语句在您试图从数据库设置值的代码周围。您确定问题是视图状态吗?对我来说,这似乎是视图状态的问题。viewstate在回发时真正负责获取数据。类似地,若我们打开了viewstate,则datatable不需要每次都重新绑定,这样就不会在每次回发时ping数据库。但是保留viewstate可能是有害的,因为整个数据都存在于页面上,因此如果viewstate保存了大量数据,则会延迟检索页面。请查看上面的代码,并告诉我我做错了什么…谢谢!非常感谢你,你帮助了我,我很沮丧地试图弄明白为什么回邮时我所有的表单值都是空的!我使用了Page.IsPostBack变量,解决了这个问题。我最初没有意识到,即使在回发时,ASP.net也会再次调用“Page_Load”方法!我有一个方法,可以在页面加载时自动清除表单,这也是在回发时清除表单!非常感谢你!通过检查此问题/状况,我的问题也得到了类似的解决。我忘了在我的DropDownList控件上设置AutoPostBack,所以当我点击按钮时,它覆盖了文本框的值,因为当时它试图填充文本框,从而删除了用户所做的更改。先生,您刚刚让我开心。这让我快发疯了+1Hmm不应该是txtName.Attribute.Add(“readonly”,“true”);?将属性
重命名为属性
。