ASP.net TextBoxのRowsプロパティに関するメモです。
例えば次のコードを書いた場合、初期表示で行数が5行になります。
1 |
<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine" Rows="5"></asp:TextBox> |
勘違いしがちですが、「Rows="5"」は行数の制限をするものではありません。
TextBoxのTextModeをMultiLineすると、実際に出力されるHTMLはtextarea です。
textarea には行数を制限するような属性は存在しないので、MaxRowsといったプロパティはありません。
したがって、行数を制限することはできません。
なので、行数の制限をしたい場合は、何らかのイベントの処理をするときに行うしかありません。
ポストバックが発生するタイミングで行うことになるので、ボタンを押したときなどに、Textboxの文字列が何行あるか取得して、行数オーバーを検知するというのが一番単純です。
入力フィールドが複数ある場合は、TextBoxのTextChangeプロパティを使えばよいです。
この場合は、AutoPostBackプロパティをTrueにしておけば、TextBoxからフォーカスが移動したときに、ポストバックが行われて、行数チェックをしてメッセージを出すことができるので、ポストバックのタイミングのズレを小さくすることも可能です。
ASP.net TextBoxの行数制限の代替案としては、想定する1行あたりの文字数から計算して文字数制限をしてしまうという方法も考えられます。
想定する1行あたりの文字数から計算して文字数制限をする
1行あたり10文字で8行なら、MaxLength="80"としてしまうということです。