2009-04-29 47 views
0

我现在有一个Gridview,我想使用客户端验证,以确保行被选择(即:SelectedIndex > -1)。的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 

回答

1

这似乎挺合我意。在这种特定情况下,客户端验证听起来有些模糊,比如可能检查了您期望拥有服务器生成ID的一部分的元素。非常脆弱。

通常我会去一个额外的步骤,实际上创建从BaseValidator继承了我自己的验证控制。使封装和SoC更清洁,验证逻辑也便于携带。

0

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

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

然后,你需要在JavaScript函数“SetRowSelected()”您的页面,并让它将一个隐藏字段(例如,名为IsRowSelected)设置为像“true”这样的值。

然后你就可以添加其他JavaScript函数用于提交页面控件的“点击”事件 - 并检查它隐藏控件的值。如果不是这样,只需向用户显示alert(),否则提交页面。

这听起来像它会起作用吗?