ASP.NET TextBox
があり、ReadOnly
にしたいです。 (ユーザーは別のコントロールを使用して変更します)
ただし、PostBack()
がある場合、テキストは空の文字列にリセットされます。
ReadOnly
プロパティをTrue
のTextBox
に設定すると、そのコンテンツはPostBack()
を介して保存されないことを理解しています。
PostBack()
の後にコンテンツを保持し、TextBox
をユーザーが編集できないようにする方法はありますか?
Enabled
プロパティをFalse
に設定しようとしましたが、PostBack()
の後でもコンテンツは保存されません。
私が見つけた別の解決策と簡単なもの:
これをPage Loadメソッドに追加します。
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チェーンに保持されないためと思われます。
Bindigを「attr {readonly:hasZipCode}」に置き換えて解決しました
<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を使用してこのように実行すると、コードビハインドで実行する必要がないという利点があります。これは、グリッドビューなどで実行する必要がある場合は困難です。
このjavascriptコードはInternet Explorerでのみテストされ、その一部はIEでのみ機能します。たとえば、テキストボックス内のテキストの先頭にキャレットを配置するだけのcreateTextRange部分などがありますが、その部分は不要な場合はスキップしてください。
この手法の中核が他のブラウザで機能する場合、コードをブラウザ間でクロスさせることができるはずです。ここでの考え方の中心は、読み取り専用を設定した後のぼかしと、フォーカスを再度設定するためのタイムアウトです。
読み取り専用のみを設定すると、次にTextboxにフォーカスを与えるまで読み取り専用になりません。
そしてもちろん、コードを引数に「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);
"
/>