web-dev-qa-db-ja.com

PostBack()の後に読み取り専用TextBoxのテキストを保持する方法は?

ASP.NET TextBoxがあり、ReadOnlyにしたいです。 (ユーザーは別のコントロールを使用して変更します)

ただし、PostBack()がある場合、テキストは空の文字列にリセットされます。

ReadOnlyプロパティをTrueTextBoxに設定すると、そのコンテンツはPostBack()を介して保存されないことを理解しています。

PostBack()の後にコンテンツを保持し、TextBoxをユーザーが編集できないようにする方法はありますか?

EnabledプロパティをFalseに設定しようとしましたが、PostBack()の後でもコンテンツは保存されません。

29
Youssef

私が見つけた別の解決策と簡単なもの:

これをPage Loadメソッドに追加します。

protected void Page_Load(object sender, EventArgs e)
{
     TextBox1.Attributes.Add("readonly", "readonly");
}
59
Youssef

他のコントロールに値を非表示フィールドに保存させ、ポストバック時に、非表示フィールドから値を取得し、サーバー側のテキストボックスにプッシュします。

6
The Evil Greebo

txtStartDate.Attributes.Add("readonly", "readonly");は、Javascript、隠し変数、キャッシュ、Cookie、セッション、およびキャッシュの代わりに、最良のソリューションのベストでページをロードします。

2
Jay

Request.Form[txtDate.UniqueID]を使用して値を取得します。あなたはそれを取得します !!

1
Nitin

これと同じ問題が発生しましたが、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>
0
Rodrigo

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);
"
  />
0
Magnus