Open takachaa opened 7 years ago
以下のようにAutoPostBackをかけたテキストボックスにバリデーション(空白だめ)をかけてみたい
<form id="form1" runat="server">
<p>
<asp:Label ID="Label1" runat="server" Text="Label1"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server" Height="19px" AutoPostBack="TRUE" ontextchanged="TextBox1_TextChanged"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ErrorMessage="値を入力してください" ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
</p>
<p>
<asp:Label ID="Label2" runat="server" Text="Label2"></asp:Label>
<asp:TextBox ID="TextBox2" runat="server" Height="19px"></asp:TextBox>
</p>
<p>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</p>
</form>
コードビハインドは以下のように記述する
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
Page.Validate();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
Label1.Text = TextBox1.Text;
Label2.Text = TextBox2.Text;
}
}
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
if (Page.IsValid)
{
Label1.Text = TextBox1.Text;
}
}
}
補足 有効な検証コントロールを切り替える http://www.atmarkit.co.jp/fdotnet/dotnettips/251aspdisablevalid/aspdisablevalid.html
まず、コントロール単位で ViewState を使用しない宣言をする EnableViewState= false にしていた場合、基本的には初期値(デザイン時の設定)に戻る。 ただし、戻らないで設定された値が残ったままになる項目もある。 それがWebフォームコントロールでいうところの以下。
TextBox.Text CheckBox.Checked RadioButton.Checked (ただし GroupName を付けていた場合に限る。単独のものは消える) CheckBoxList.SelectedIndex RadioButtonList.SelectedIndex
つまり HTMLフォームに置き換えて考えたときの一般的な入力項目は基本的には残るようだ。 (ただし、これはもしかしたらブラウザに依存するものもあるかもしれない)
これに対して、以下のような Webフォーム専用の項目が初期化される。
Label.Text CheckBox.Text RadioButtonList.Items DropDownList.Items 等々・・・
参考 http://www.ilovex.co.jp/Division/ITD/archives/2004/11/aspnet_web_1.html
↓
ページ遷移(同じページ)がおこっても入力された値を保持する仕組み
元の値を保持しておく仕組み
AutoPostBackの基本
以下のようにTextBox2にAutoPostBackを設定した場合は
以下のようにコードビハインド側でメソッドを実装してテキストが変更されたたら以下のメソッドが呼ばれることになる。
参考URL http://asp.popotoo.com/21