Gridview:验证SelectedIndex> -1

时间:2009-04-29 03:33:49

标签: asp.net validation gridview

我目前有Gridview,我想使用客户端验证来确保选择了一行(即:SelectedIndex > -1)。

目前我正在使用<asp:CustomValidator>,但希望摆脱服务器端验证。以下是我目前正在做的事情:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:BoundField HeaderText="MSN" DataField="MSN" />
        <asp:CommandField ShowSelectButton="True" />
    </Columns>
</asp:GridView>
<asp:CustomValidator ID="cvSelected" runat="server" ErrorMessage="Please select!" />

然后在代码后面(.cs):

Private Sub cvSelected_ServerValidate(ByVal source As Object, ByVal args As _
System.Web.UI.WebControls.ServerValidateEventArgs) Handles cvSelected.ServerValidate
    args.IsValid = (GridView1.SelectedIndex > -1)
End Sub

2 个答案:

答案 0 :(得分:1)

这对我来说似乎没问题。在这种特定情况下,客户端验证听起来有点模糊,比如可能会检查您希望拥有服务器生成的ID的一部分元素。非常脆弱。

通常我会再做一步,然后创建我自己的验证器控件,它继承自BaseValidator。使封装和SoC更清洁,验证逻辑也可移植。

答案 1 :(得分:0)

在页面后面的代码的GridView_RowCreated()事件中,您可以像这样向行标记添加属性:

e.Row.Attributes.Add("onclick", "SetRowSelected();");

然后你需要在你的页面中包含javascript函数“SetRowSelected()”,并让它将一个隐藏字段(例如,名为IsRowSelected)设置为类似“true”的值。

然后你可以在用于提交页面的控件的“onclick”事件中添加另一个javascript函数 - 并让它检查隐藏控件的值。如果不是这样,只需向用户显示alert() - 否则提交页面。

这听起来有效吗?