1

このEditTemplateを使用してUpdatePanelでGridviewを取得しました。

<edititemtemplate>
    <asp:textbox id="txtDistFrom" runat="server" text='<%# Bind("distFrom") %>' width="30" />
    <asp:CustomValidator ID="valDistFrom" ValidateEmptyText="True" OnServerValidate="valDistFromTo_ServerValidate" ControlToValidate="txtDistFrom" Text="Missing" ToolTip="Invalid" Display="Dynamic" runat="server" />
</edititemtemplate>

そして、単純なサーバー側の機能:

Protected Sub valDistFromTo_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs)
    Dim cv As CustomValidator = CType(source, CustomValidator)
    Dim gvr As GridViewRow = cv.NamingContainer
    Dim tbV As UI.WebControls.TextBox = gvr.FindControl("txtDistFrom")
    If tbV.Text <> "" Then
        args.IsValid = False
        cv.ErrorMessage = "inhalt ist " & tbV.Text
    End If
End Sub

ただし、このコードをデバッグする場合、サーバー側の関数は実行されません。グリッドビューに関係しているようですので、IDで直接コントロールにアクセスすることはできません。助言がありますか?

4

5 に答える 5

1

この場合、必須のフィールドバリデーターを使用できます。これはグリッドで問題なく機能するはずです。

サーバー側の検証では、カスタムバリデーターをグリッドの外に完全に移動し、ControlToValidateプロパティを空白のままにします。検証をグリッドのRowUpdatingイベントに移動し、カスタムバリデーターにエラーメッセージを設定できます。バリデーターのIsValidプロパティを適切に設定することを忘れないでください。

于 2009-09-09T14:00:11.060 に答える
1

VBを次のように変更した場合:

Protected Sub valDistFromTo_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs)
        Dim cv As CustomValidator = CType(source, CustomValidator)
        If args.Value <> "" Then
            args.IsValid = False
            cv.ErrorMessage = "inhalt ist " & args.Value
        End If
End Sub

動作するはずです。args.Valueを使用していることに注意してください。私はEditTemplates内でCustomValidatorsとTextBoxを使用し、ControlToValidateを常にTextBox IDに設定していますが、これは機能しますが、TextBoxオブジェクトを試したとおりに取得することはできません。TGnatの回答で示唆されているように、これはRowUpdating Eventをいじるよりもはるかに簡単で、はるかにクリーンだと思います。

于 2009-09-09T21:19:53.820 に答える
0

テキストボックスのIDは、GridView、ListView、Repeaterなどの繰り返し要素では使用されないため、この問題はControlToValidateプロパティに関連しています。言い換えると、ASP.NETのエンジンの制限に遭遇しました。

ただし、この問題を解決する方法はわかりません。GridViewのOnRowBoundメソッドにメソッドをアタッチすることにより、プログラムでCustomValidatorを追加することにより、それを実行できる場合があります。

この記事は答えを提供するかもしれませんこの記事は答えを提供するかもしれません:実行時にAsp.Net検証コントロールをGridViewと統合する

于 2009-09-09T10:51:06.097 に答える
0

また、ControlToValidateが問題だと思う傾向があります。.NETは実行時にそのコントロールのIDを変更し、カスタムバリデーターはおそらくそれを取得していません。

FindControl()を使用してRowCreatedまたはRowDataboundにcustomvalidatorを追加してみます

于 2009-09-09T14:26:36.653 に答える
0

私も同じ問題を抱えていました。customvalidatorでこのプロパティを明示的に設定すると、サーバー側のコードが起動しました。

    EnableClientScript="false"
于 2012-03-05T21:25:14.633 に答える