0

我有一个 jQuery 自动完成字段,它从我的 MVC 操作中获取现有数据。我想确保输入到字段中的数据不存在于数据库中。

我在自动完成上使用 .result 和 .change 将字段设置为 class =“input-validation-error”。当我添加 xVal 客户端验证时,这仍然有效,但 xVal 似乎清除了 css 类,所以现在字段条目短暂变为红色,然后返回到清晰的背景。

与其尝试更改 xVal 代码,不如让 xVal 客户端验证以错误状态显示字段,就像正常客户端数据验证错误一样。

我该怎么做?我可以在自动完成 .result 事件中使用什么代码来强制 xVal 中的错误状态?

更新: 我尝试了 Wyatt Barnett 的想法,但从我的评论中可以看出,这不是我想要的。这是我所拥有的代码:

字段标记:

            <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 回答