1

Edit テンプレートの入力フィールドに Validation コントロール (必須および正規表現) を持つ GridView がページにあります。基本的に、GridView で [編集] をクリックしたときに、ユーザーが送信した入力を検証しています。

マークアップの例を次に示します。

<asp:TemplateField HeaderText="Name" SortExpression="Name">
    <EditItemTemplate>
        <asp:TextBox ID="EditFacultyName" runat="server" Text='<%# Bind("Name") %>' 
            CausesValidation="True"></asp:TextBox>
        <br />
        <asp:RequiredFieldValidator ID="EditFacultyNameRequired" runat="server" 
            ControlToValidate="EditFacultyName" ErrorMessage="You must provide a name" 
            ValidationGroup="ValidateGridView" Display="Dynamic"></asp:RequiredFieldValidator>
        <asp:RegularExpressionValidator ValidationExpression="^[a-zA-Z0-9 ]*$" 
            ID="EditFacultyNameRegex" runat="server" 
            ControlToValidate="EditFacultyName" 
            ErrorMessage="Must be alphanumeric characters and spaces" Display="Dynamic" ValidationGroup="ValidateGridView"></asp:RegularExpressionValidator>
    </EditItemTemplate>
    <ItemTemplate>
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("Name") %>'></asp:Label>
    </ItemTemplate>
</asp:TemplateField>

入力要素にフォーカスを失うと検証コントロールが起動しますが、GridView で [更新] をクリックしてもページの送信は停止しません。

よりグラフィックな例を作成しました。

ここに画像の説明を入力

ここで、[名前] フィールドが空で、[場所] フィールドに無効な文字が含まれていることがわかります。検証コントロールにエラーが表示されますが、[更新] (赤丸で囲んだ部分) をクリックすると、検証コントロールは引き続き処理され、データベースに追加されます。

どうすればそれを防ぐことができますか?

ありがとう!

4

1 に答える 1

2

IsValidサーバー側コードの更新イベント ハンドラーで、ページのプロパティを確認する必要があります。悪意のあるユーザーはクライアント側の検証を簡単にバイパスできるため、クライアント側の検証に加えてこれを行うことをお勧めします。

protected void OnUpdate(object sender, EventArgs e)
{
    if(Page.IsValid)
    {
        // update data store
    }
}

http://msdn.microsoft.com/en-us/library/system.web.ui.page.isvalid(v=vs.100).aspx

于 2012-11-15T01:59:00.640 に答える