簡體   English   中英

文本框在回發時失去價值

[英]textboxes lose value on postback

我的網頁上有大約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控件:

<asp:TextBox ID="txtName" runat="server" EnableViewState= "false" ReadOnly="true" /> 

如果您通過客戶端的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. 回傳后, <input>文本框不會保存其狀態。 ASP.NET不會為您處理。

  2. 如果將代碼放在Page_Load事件中以設置ASP.NET文本框的值,則不會保存回發的值,因為在ASP.NET頁面生命周期中還原子控件狀態后會發生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();

您可以做的另一件事,如果可以的話,這就是我建議將<input>元素更改為ASP.NET文本框,並將任何客戶端Javascript事件連接到該文本框。 然后ASP.NET將完全處理您的回發。

我在尋找相同類型問題的答案時找到了這個,現在我發現了我的問題,我認為它可以幫助別人把它放在這里。

在我的情況我有一個標簽<form>里面<form>我的控制,所以,如果你沒有以上我sugest搜索解決問題<form>你賠了進去<form>

希望它對某些情況有幫助。

如果我讓你要求正確,我認為你正試圖讓那些文本框只讀。 如果是這樣,我之前遇到過這個問題並通過使用C#而不是ASP.NET來使文本框只讀,我只是添加了像textboxName.Attributes.Add("readonly", "readonly"); 在Page_Load中它工作得很好。 我在Stackoverflow上找到了這個解決方案

而不是TextBoxPassword.Text=Password

使用

TextBoxPassword.Attributes["value"]=Password

您的視圖狀態似乎已被禁用。 在Page指令中啟用viewstate。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM