[英]How to keep the Text of a Read only TextBox after PostBack()?
我有一個 ASP.NET TextBox
,我希望它是ReadOnly
。 (用戶使用另一個控件修改它)
但是當有PostBack()
,文本被重置為空字符串。
我知道,如果您將TextBox
的ReadOnly
屬性設置為True
,則其內容不會通過PostBack()
保存。
有沒有辦法在PostBack()
之后保留內容並使TextBox
不能被用戶編輯?
我試圖將Enabled
屬性設置為False
,但在PostBack()
之后內容仍然沒有保存。
我發現的另一種解決方案更簡單:
將此添加到頁面加載方法:
protected void Page_Load(object sender, EventArgs e)
{
TextBox1.Attributes.Add("readonly", "readonly");
}
讓您的其他控件將值存儲在隱藏字段中,並在回發時,從隱藏字段中提取值並將其推送到服務器端的文本框中。
txtStartDate.Attributes.Add("readonly", "readonly");
在最佳解決方案中的最佳頁面加載,而不是 Javascript、隱藏變量、緩存、cookie、會話和緩存。
使用Request.Form[txtDate.UniqueID]
獲取值。 你會得到的 !!
我有同樣的問題,但使用 Knockout 綁定“啟用”和 ASP.Net 服務器控制文本。
這邊走:
<asp:TextBox ID="txtCity" runat="server" required="required" class="form-control" placeholder="City" data-bind="value: city, enable: !hasZipCode()"></asp:TextBox>
但是,提交表單時,此字段值始終為空。 我認為這是因為如果控件被禁用,它就不會持久存在於 ViewState 鏈上。
我解決了用 'attr{ readonly: hasZipCode}' 替換 bindig 'enable'
<asp:TextBox ID="txtCity" runat="server" required="required" class="form-control" placeholder="City" data-bind="attr{ value: city, readonly: hasZipCode }">/asp:TextBox>
這是一種在 Textbox 本身的 onfocus 事件中使用 javascript 的方法。
用 javascript 這樣做的好處是你不需要在后面的代碼中做,如果你需要在 gridviews 或類似的東西中做這件事可能會很困難。
此 javascript 代碼僅在 Internet Explorer 上進行測試,並且它的某些部分僅適用於 IE,例如 createTextRange 部分,它只是為了使插入符最終出現在文本框中的文本開頭,但該部分可以如果不需要,可以跳過。
如果這項技術的核心適用於其他瀏覽器,那么應該可以使代碼跨瀏覽器。 這里的想法的核心是設置只讀后的模糊,然后再次設置焦點的超時。
如果您只設置只讀,那么它不會變為只讀,直到您下次給文本框焦點。
當然,代碼可以放入一個函數中,而不是用“this”作為參數調用。
<asp:TextBox
ID="txtSomething"
runat="server"
Text='<%# Bind("someData") %>'
onfocus="
var rng = this.createTextRange();
rng.collapse();
rng.select();
if (this.allowFocusevent=='0') {return;};
this.allowFocusevent='0';
this.readOnly=true;
this.blur();
var that=this;
setTimeout(function(){that.focus()},0);
"
/>
將文本框的 ContentEditable 屬性設置為 false ContentEditable="false" .. 它不會允許您編輯文本框的內容,即;將使文本框只讀,並且還會使回發后的值保留在文本框中.. 我認為它最簡單的方法來做到這一點..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.