2011-09-22 14 views
0

這是我的計劃爲什麼文本框在回發時失去其禁用屬性,但沒有其值屬性?

<script src="Scripts/jquery-1.6.4.js" type="text/javascript" language="javascript"></script> 
<script type="text/javascript" language="javascript"> 
    function one() { 
     $(document).ready(function() { 
      $('#<%= textbox.ClientID %>').attr('disabled', 'disabled'); 
     }); 
    } 
    function two() { 
     $(document).ready(function() { 
      $('#<%= textbox.ClientID %>').attr('value', 'hello stackoverflow.com!'); 
     }); 
    } 
</script> 

<input type="button" value="one" onclick="one();" /> 
<input type="button" value="two" onclick="two();" /> 
<asp:TextBox ID="textbox" runat="server"></asp:TextBox> 
<asp:Button ID="postbackButton" runat="server" Text="post back" /> 
  1. 當我點擊「按鈕,一個」,文本框切換到禁用。然後我點擊'回發按鈕',文本框切換到啓用(它失去了我設置的!)。

  2. 當我點擊'按鈕2'時,文本框會改變它的值。然後我點擊'回發按鈕',文本框不會失去它的價值。

我該怎麼做才能保持按鈕的禁用狀態? 如果我可以在客戶端做到這一點,它會更好..

非常感謝,盧西亞諾。

回答

0

原因ViewState。頁面執行期間ASP.NET服務器控件的每個更改的屬性值將由ViewState保存。閱讀ViewState

+0

視圖狀態方案變化是對所控制的服務器的影響。如果在代碼隱藏中將ENABLED屬性設置爲FALSE,則ViewState將發揮作用。在事物的HTML側或通過腳本在CLIENT上設置的控件值不存儲在ViewState中。 –

1

ASP.Net通過ControlState記錄您爲您發佈的值。如果你在後面的代碼中設置了DISABLED狀態(通過enabled = false),那麼它將通過ViewState保留。如果你已經在ASPX頁面中設置了它,那只是價值。既然你是通過JS來做的,那麼服務器就無法知道它已經被設置了。

處理這種情況的一種方法是,您可以執行諸如在隱藏字段中按名稱保留禁用文本框的列表。然後在帖子後面,您可以解析隱藏字段中的值,並在後面的代碼中適當地設置文本框的啓用狀態,從而允許ViewState處理事情。

+0

+1我最初沒注意到他是通過JS禁用的,這顯然是錯誤的。 – MStp

0

簡單的原因是你必須這樣做。

protected void Page_Load(object sender, EventArgs e) 
{ 
    TextBox1.Enabled = true; 
} 
protected void Button1_Click(object sender, EventArgs e) 
{ 
    TextBox1.Enabled = false; 
} 

這裏您在Load事件中啓用了按鈕,然後在單擊第一個按鈕時將其禁用。然後你點擊第二個按鈕,它將執行回發它將進入Page_Load事件並啓用按鈕。

如果您只是刪除TextBox1.Enabled = true;從Page_Load,PreInit,Init事件中你不會看到這個錯誤。

不要通過JS啓用禁用。

0

如果textboxrunat="server"屬性,如果是禁用然後使用javascriptjquery你不能改變它的值。它只能在服務器端更改

相關問題