将参数传递给服务器端CustomValidator

时间:2012-02-23 12:03:24

标签: c# asp.net validation

我希望能够将Arguments传递给服务器端CustomValidator。

我想要这个,因为我要验证的控件位于网格的编辑字段中。

代码:

<telerik:GridTemplateColumn DataField="numbercancelled" DataType="System.Int32" FilterControlAltText="Filter numbercancelled column"
                        HeaderText="numbercancelled" SortExpression="Numbercancelled" UniqueName="numbercancelled">
                        <ItemTemplate>
                            <asp:Label runat="server" ID="lblNumbercancelled" Text='<%# Eval("numbercancelled") %>'>
                            </asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:TextBox runat="server" ID="tbNumbercancelled" Text='<%# Bind("numbercancelled") %>'
                                MaxLength="10">
                            </asp:TextBox>
                            <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ErrorMessage="This is a required field"
                                ControlToValidate="tbNumbercancelled" Display="Dynamic"></asp:RequiredFieldValidator>
                            <asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" ErrorMessage="Please enter a number higher than 0"
                                ValidationExpression="^(0|[1-9][0-9]*)$" ControlToValidate="tbNumbercancelled"
                                Display="Dynamic"></asp:RegularExpressionValidator>
                            <asp:CustomValidator ID="NumberCancelledValidator"
                                runat="server" ErrorMessage="CustomValidator" ControlToValidate="tbNumbercancelled"
                                OnServerValidate="NumberCancelledValidator_ServerValidate"
                                ></asp:CustomValidator>
                        </EditItemTemplate>
                    </telerik:GridTemplateColumn>

我想传递当前正在编辑的行的ID,因为它的验证方式取决于您正在编辑的行。

最后我想出了这个:

CustomValidator cvalid = (CustomValidator)source;
GridEditFormItem gv = (GridEditFormItem)cvalid.NamingContainer;

int ItemIndex = ((GridEditFormItem)gv.EditFormCell.NamingContainer).ItemIndex;
var grid = InkoopDetailGridEdit;
int ID = int.Parse(((Label)((GridDataItem)grid.Items[ItemIndex]).Cells[0].FindControl("ID")).Text);

1 个答案:

答案 0 :(得分:2)

您可以使用以下示例获取行索引:

CustomValidator cvalid = (CustomValidator)source;
GridViewRow gv = cvalid.NamingContainer;
int index = gv.RowIndex;