簡體   English   中英

客戶端JS和ASP.NET回發

[英]Client-side JS and ASP.NET Postback

我有一些設置表單字段的客戶端JavaScript。 頁面發回時,這些字段將重置。

為什么是這樣? 回發發生時,是否不捕獲字段值並將其放入ViewState中?

編輯:當我中斷Page_Load()上的調試器時,在回發之后執行任何代碼之前,表單字段值是空的。

從客戶端javascript填充的表單元素是否設置為已禁用? 如果是這樣,ASP.NET將忽略該值。

例如:

<asp:TextBox ID="TextBox1" Enabled="False" Runat="Server" />

<script type="text/javascript">
    document.forms[0].elements["TextBox1"].style.disabled = false;
    document.forms[0].elements["TextBox1"].value = "Value set from Javascript";
</script>

運行此代碼時,ASP.NET認為該文本框已禁用,因此在回發中將其值丟棄,因此TextBox1.Text的值將始終為空。 據我所知,這種行為適用於所有表單元素。 如果ASP.NET認為它們已被禁用,並且隨后被啟用並在客戶端填充,則該值將在回發中不可用。

是。 聽起來您還有其他問題(可能是OnLoad處理程序沒有檢查IsPostback字段,因此會覆蓋您更改的值嗎?)。

檢查服務器端正在初始化什么,我看到的最常見的問題是任何服務器端初始化代碼都不會像這樣檢查IsPackBack:

if (!Page.IsPostBack) {

    // Do Work

}

要檢查的另一件事是您正在執行回發還是回調。 如果要執行回調,則與回調一起發送回的表單字段值是頁面首先發送給客戶端的值。 由於某種原因,ASP.NET AJAX會腌制這些值,並在每次回調時將其發送,而不是重新讀取表單字段。

這是因為我在字段上設置了enabled="false" 我將字段更改為readonly="true" ,發生了同樣的事情。

解決方案是在運行時使用JS將字段更改為只讀。

暫無
暫無

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

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