2009-12-10 109 views
3

我在客戶端上使用Javascript來更新呈現爲HTML文本框的ASP Textbox控件。使用Javascript更新客戶端上的TextBox並從服務器讀取值

當我試圖訪問服務器上的文本框控件中的值時,我並不感到驚訝,因爲無法通過TextBox服務器控件的普通Text屬性訪問文本框的更新值,因爲該值的狀態,我假設可能保存在ViewState中,服務器不知道客戶端腳本已經改變了它。

是獲得使用類似的更新值的最佳方式:

的Request.Form(TextBox.UniqueID)?

我懷疑是因爲文本框被填充到GridView控件的一行內,並且在執行DataBind時該行被添加到運行時,所以我得到的結果可能與TextBox在Design上的控件上繪製的結果不同時間。

我證實,放置到客戶端文本框中的值是通過這種訪問:

Request.Form(CType(Row.Cells.Item(4).FindControl("txtTotal"), TextBox).UniqueID) 

,但不能訪問通過該:

CType(Row.Cells.Item(4).FindControl("txtTotal"), TextBox).Text 

後者返回一個空字符串。

我認爲這兩行講述了整個故事。

當你認爲它們返回不同的結果時,有兩個屬性可以獲得文本框的值,甚至更醜陋,這似乎很難看。

有沒有更好的方法,還是這只是客戶端發展的所有榮耀?

當人們說現在的Web開發日期與客戶端(例如winform)應用程序一樣簡單時,ASP.NET就會跟蹤狀態,我總是感到驚訝。對我而言,網站開發總是更加複雜和昂貴,但我承認並不擅長web開發。

+1

你確定你沒有在Page_Load中的東西是重置文本框的值的任何更新? – 2009-12-10 19:49:34

+0

是的,我是。查看更新的帖子。 – ChadD 2009-12-10 21:22:00

回答

5

無論如何,你是否將你的文本框標記爲「只讀」,然後嘗試更新?

http://aspadvice.com/blogs/joteke/archive/2006/04/12/16409.aspx

服務器忽略,如果textbox1.ReadOnly=true;

+0

SOB!就是這樣! – ChadD 2009-12-11 00:09:34

+0

這是一個難以捉摸的小傢伙。我正在使用jQuery設置「disabled」,甚至該屬性導致該值丟失。看起來'readonly'屬性是唯一可用的屬性,可以確保將該值回傳。愚蠢。 – 2013-07-03 12:12:29

0

看看asp.net page lifecycle - 它可能會給你答案,因爲你的問題沒有足夠的細節。

如果您通過客戶端中的JS更改文本框的值,那麼在發回(提交表單)時應該爲您提供新的值。

正如Josh的評論所指出的那樣,如果您在Page_Load或其他早期生命週期事件中綁定或更新控件,則會將其清除。很難說沒有看代碼...

+0

我認爲,我填充的文本框在GridView控件的一行內,並且在執行DataBind時在運行時添加了該行,這樣我可能會得到與在Design上的控件上繪製TextBox時不同的結果時間。我確認客戶端放入文本框的值可以通過以下方式進行連接:Request.Form(CType(Row.Cells.Item(4).FindControl(「txtTotal」),TextBox).UniqueID),但無法通過以下方式訪問:CType (Row.Cells.Item(4).FindControl(「txtTotal」),TextBox).Text,後者返回一個空字符串。 – ChadD 2009-12-10 20:30:49

0

一種替代方法是將您的文本框包裝在更新面板中,而不是使用JavaScript,而是更新它的價值服務器端。

+0

是的,我必須平行的方法,UpdatePanel是另一個。試圖決定權衡。 – ChadD 2009-12-10 20:03:01

0

確保你的控件中有runat =「server」。如果你不能從代碼隱藏中訪問它,那通常是問題。

此外,請確保您尚未在其他地方的文本框中執行某些操作,例如您的page_load或其他頁面上的JavaScript。

CNC中

重要的事情需要注意:只是因爲你可以閱讀REQUEST.FORM的東西並不一定意味着你可以讀取它作爲一個.NET對象。 Request.form只是讀取從表單發送的原始請求信息。

您正試圖在行的中間讀取您的文本框。什麼是這些行的一部分,表格或其他類型的控件?包含文本框的控件是否也有一個asp.net控件,該控件也具有runat = server set?

-Another編輯 -

您在另一個回答您的文本框是在DataGrid中提到。你在哪裏綁定這個網格?在嘗試閱讀文本框(如在Page_load中)之前,您是否重新綁定它?如果你是,那麼在讀取它的值之前,你將整個網格重新設置回它的原始狀態。

+0

我可以訪問它,它只是不包含Javascript放入它的更新值。也許我可以在.NET中關閉某種自動狀態維護......嗯。 – ChadD 2009-12-10 20:02:22

1

不,您應該能夠像通常一樣從屬性中讀取它,而不管輸入是通過鍵盤還是通過javascript輸入。我希望你的問題在別處。此外,爲了解釋Aaron「確保您沒有在嘗試讀取值之前重置代碼隱藏值」我建議您逐步調試並檢查它的價值。

相關問題