0

MVCアクションから既存のデータを取得するjQueryオートコンプリートファイルがあります。フィールドに入力されたデータがデータベースにまだ存在していないことを確認したいと思います。

オートコンプリートで.resultと.changeを使用してこの作業を行い、フィールドをclass="input-validation-error"に設定しました。xValクライアント検証を追加した場合、これは引き続き機能しますが、xValはcssクラスをクリアしているように見えるため、フィールドエントリが一時的に赤くなり、その後クリアバックグラウンドに戻ります。

xValコードを変更しようとするのではなく、xValクライアント検証を取得して、通常のクライアントデータ検証エラーの場合と同様にフィールドをエラー状態で表示したいと思います。

どうすればいいですか?オートコンプリートの.resultイベントで、xValのエラー状態を強制するためにどのコードを使用できますか?

更新: ワイアット・バーネットのアイデアを試しましたが、コメントからわかるように、私が望んでいるものではありません。これが私が持っているもののコードです:

フィールドマークアップ:

            <p>
                <%= Html.LocalisedLabel("ProjectId") %>
                <%= Html.TextBox("project.ProjectId") %>
                <%= Html.ValidationMessage("project.ProjectId", "*") %>
            </p>

xValマークアップ:

       <%= Html.ClientSideValidation<ProjectBO>("project").UseValidationSummary("myValidationSummary") %>
             <%= Html.ClientSideValidation<ProjectBO>("project").AddRule("ProjectId", new RemoteRule(Url.Action("ValidateProjectIdCreate", "LookUp", new { projectId = Model.ProjectId})))%>

オートコンプリートのJavaScriptマークアップ:

<script type="text/javascript">

    $(document).ready(function() {
        $('#project_ProjectId').autocomplete('<%= Url.Action("ProjectIdList", "LookUp") %>',
{
    delay: 10,
    minChars: 1,
    matchCase: 0,
    matchSubset: 1,
    autoFill: false,
    maxItemsToShow: 10,
    cacheLength: 10
}
);

        $('#project_ProjectId').result(function(item) {
            if (item) {
                //match
                $('#project_ProjectId').attr("class", "input-validation-error");
            }
            else {
                $('#project_ProjectId').removeAttr("class");
            }
        });
        $('#project_ProjectId').change(function() {
            $('#project_ProjectId').attr("class", "");
        });
    });
</script>

このスクリプトは処理するイベントを提供しますが、何を入れることができますか?

4

2 に答える 2

1

xVal 1.0にアップグレードして、ajax検証玩具を利用してみませんか?そうすれば、これに関してフレームワークと戦う必要はありません。


その角度は機能しないので、おそらくautocomplete.resultをjquery検証API(xValもこれに乗る)と組み合わせて使用​​して処理することができます。

于 2009-09-29T13:41:19.697 に答える
0

ついにそれがうまくいった。

入力フィールドでjQueryオートコンプリートを使用して、既存のデータベースエントリのルックアップリストを表示することにより、ユーザーにガイダンスを提供しました。

オートコンプリートから表示されたリスト項目を選択するか、存在しないデータベースエントリを入力してフィールドを終了すると、xVal RemoteValidatorが起動して、検証の失敗条件を設定するか、クリアします。

コードは次のとおりです。

       <%= Html.ClientSideValidation<ProjectBO>("project").UseValidationSummary("myValidationSummary"

.AddRule( "ProjectId"、new RemoteRule(Url.Action( "ValidateProjectIdCreate"、 "LookUp")))%>

オートコンプリートスクリプトは次のとおりです。

<script type="text/javascript">
    $(document).ready(function() {
        $('#project_ProjectId').autocomplete('<%= Url.Action("ProjectIdList", "LookUp") %>',
            {
                delay: 10,
                minChars: 1,
                matchCase: 0,
                matchSubset: 1,
                autoFill: false,
                maxItemsToShow: 10,
                cacheLength: 10
             }
          );
    });
</script>

次に、質問の前のコードのautocomplete.resultイベントと.changeイベントを削除しました。

うまく機能します。

于 2009-09-30T00:00:02.890 に答える