bee*_*bee 20 javascript c# asp.net
我的网页上有大约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();
}
Run Code Online (Sandbox Code Playgroud)
并将以下代码放在按钮的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);
}
Run Code Online (Sandbox Code Playgroud)
文本框仍然清晰,没有一个是readonly ..........
请帮忙
vis*_*uqi 27
我遇到了类似的问题, 本文的ViewState和Readonly属性最好地描述了 "在回发期间通过javascript改变数据丢失"的解决方案.
例如,假设我们有这个asp.net控件:
<asp:TextBox ID="txtName" runat="server" EnableViewState= "false" ReadOnly="true" />
Run Code Online (Sandbox Code Playgroud)
如果您通过客户端的javascript更改此控件的值,它将不会通过服务器端的回发传播...无论您使用javascript做什么,除非您删除readonly ="true".现在有一个解决这个问题的方法,如上文所述.
简单地把它放在PageLoad事件中
if (!IsPostBack)
txtName.Attributes.Add("readonly","readonly");
Run Code Online (Sandbox Code Playgroud)
你完成了 如果您的意图是禁用编辑控件,只是使用上面的代码片段,请不要忘记删除ReadOnly ="true"或Enable ="false".如果你把它打开,别忘了删除Enable ="false".
我遇到的另一件事......如果您使用的是ASP.NET TextBox控件(例如),并且它是READONLY或DISABLED,则回发将不会捕获更改的值.
根据我的问题,我通过javascript更改控件的值,即使浏览器呈现更改,在回发上,控件仍保留原始值.
似乎也是一个常见问题... javascript启动自定义ASCX日历控件,结果通过javascript注入文本框.不应允许用户直接修改文本框值...
string strDate = Request.Form["id_of_input_element"].ToString();
Run Code Online (Sandbox Code Playgroud)
我最终使用了上面的内容,在回发后"重置"控件,改变它的值!
在<input>回发后的文本框将不保存其状态.ASP.NET不会为您处理.
如果将代码放在Page_Load事件中以设置ASP.NET文本框的值,则不会保存回发的值,因为在ASP.NET页面生命周期中还原子控件状态后会发生Page_Load .这些值已由ASP.NET恢复,但您将覆盖其还原的值.
修复#2的正确做法是Page.IsPostBack在加载初始状态之前进行检查,如下所示:
if ( !Page.IsPostBack )
{
// set the textbox initial states from the database
}
Run Code Online (Sandbox Code Playgroud)更新:
有两种方法可以解决问题#1.您可以做的一件事是使用Request.Form []集合手动检索发布的返回值,如下所示:
string strDate = Request.Form["id_of_input_element"].ToString();
Run Code Online (Sandbox Code Playgroud)
您可以做的另一件事,如果可以的话,这就是我建议将<input>元素更改为ASP.NET文本框,并将任何客户端Javascript事件连接到该文本框.然后ASP.NET将完全处理您的回发.
| 归档时间: |
|
| 查看次数: |
83791 次 |
| 最近记录: |