代码之家  ›  专栏  ›  技术社区  ›  Mark Glorie

GridView:验证selectedIndex>-1

  •  0
  • Mark Glorie  · 技术社区  · 16 年前

    我现在有一个 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 回复  |  直到 8 年前
        1
  •  1
  •   Rex M    16 年前

    我觉得没问题。在这个特定的情况下,客户端验证听起来有点模糊,比如检查您希望具有服务器生成ID的一部分的元素。非常脆弱。

    通常,我会额外执行一步,并实际创建自己的验证程序控件,该控件继承自 BaseValidator . 使封装和SOC更干净,验证逻辑也可移植。

        2
  •  0
  •   Ron Savage    16 年前

    在页面后面的代码的gridView_RowCreated()事件中,可以向行标记添加属性,如下所示:

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

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

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

    这听起来会奏效吗?