2011-11-08 15 views
0

私はTextBoxコントロールを持っていると私は値readonlyreadonly属性持っているレンダリングされた入力要素たい:マークアップのTextBoxコントロールにreadonly属性を設定しますか?

textBox.Attributes["readonly"] = "readonly" 

:私は、次のコードを使用して、コードビハインドでそれを行うことができ

<input type="text" readonly="readonly" /> 

をむしろ、すべてのコントロール属性とその値をマークアップに入れることになります。マークアップでそれを行うことはできますか?
解決策は、TextBoxコントロールを拡張することでしたが、これは意図した結果に対して非常に複雑に感じます。


JavaScriptを使用してクライアント側の値を変更し、ポストバック中にサーバー側の値を読み取ることができます。 TextBox.ReadOnlyプロパティをTrueに設定すると、ではなくで問題が解決されるため、サーバーではポストバック時にTextBoxの値が無視されるため注意が必要です。 (MSDN。)私は単にブラウザからの読み取り専用の動作が必要です。

+0

多分私は間違っていますが、asp.netはあなたが追加するすべての属性を出力していませんか?あなたはデザインでそれを追加しようとしましたか?それがページの出力に終わるかどうかを確認しましたか? 「CssClass」の代わりに誤って「class」と書くことがあり、単にclass属性を追加するだけで実際にはそうなるかもしれません。 – Bazzz

+0

@Bazzz:これを試しましたが、ASP.NETのマークアップ属性は大文字小文字を区別しないため、 'TextBox.ReadOnly'属性の文字列化されたブール値を期待するため、エラーが発生します。 –

+0

良い点、私はそれを考えなかった。 – Bazzz

答えて

0

を非表示フィールドの値にアクセスすると あなたがそれを行うことはできませんようですASP.NETのReadOnly副作用を受けることなく、きれいにマークアップで。

しかし、インラインコードを使用すると、醜いように見えますが、

<asp:TextBox runat="server" ID="textBox" /> 
<% textBox.Attributes["readonly"] = "readonly"; %> 
0

あなただけの解決策は、jsを使用することです。

1

次は、テキストの値がコードビハインドで使用できる読み取り専用のテキストボックスを作成します。

マークアップ:

<asp:TextBox ID="Text1" runat="server" Text="One Two Three" ReadOnly="true" /> 

コードビハインド(この例でのC#):

string someText = string.Empty; 
if (Page.IsPostBack) 
    someText = Text1.Text; 
+0

ポストバック中ではありません。質問にリンクしたMSDNの記事を参照してください。 –

+0

あなたはこの方法では達成できないことは明らかではありません。サーバーはクライアントに値の変更を許可しませんが、値は引き続きサーバーで使用できます。 –

+0

これは、HTMLテキストボックスを使って私にとってうまくいった。 – jwiscarson

0

1つの可能な方法は、隠しフィールドを使用することです。あなたは、JavaScriptで読み取り専用テキストボックスの値を変更隠しフィールドのも値を変更して、サーバー側で

関連する問題