我目前有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
答案 0 :(得分:1)
这对我来说似乎没问题。在这种特定情况下,客户端验证听起来有点模糊,比如可能会检查您希望拥有服务器生成的ID的一部分元素。非常脆弱。
通常我会再做一步,然后创建我自己的验证器控件,它继承自BaseValidator。使封装和SoC更清洁,验证逻辑也可移植。
答案 1 :(得分:0)
在页面后面的代码的GridView_RowCreated()事件中,您可以像这样向行标记添加属性:
e.Row.Attributes.Add("onclick", "SetRowSelected();");
然后你需要在你的页面中包含javascript函数“SetRowSelected()”,并让它将一个隐藏字段(例如,名为IsRowSelected)设置为类似“true”的值。
然后你可以在用于提交页面的控件的“onclick”事件中添加另一个javascript函数 - 并让它检查隐藏控件的值。如果不是这样,只需向用户显示alert() - 否则提交页面。
这听起来有效吗?