1

我有一个 ASP.NET MVC3 解决方案。我使用远程验证来检查用户名是否已经存在。

在第一阶段,我使用以下验证属性:

[Required, Remote("UserNameAlreadyExists", "User", Error="Already exists!"]
public string UserName { get; set; }

这是运行时的跟踪:

在此处输入图像描述

然后我意识到我需要传递额外的字段(userID)来验证,因此我这样做:

[Required, Remote("UserNameAlreadyExists", "User", AdditionalFields="UserID", Error="Already exists!"]
public string UserName { get; set; }

这是运行时的跟踪:

在此处输入图像描述

你会看到还有一个 POST ?!

为什么?Tt 在我的情况下是个问题。这让我发疯。

谢谢你的帮助。


更新

这是我的 Edit.cshtml 的代码

@using (Html.BeginForm())
{
    @Html.HiddenFor(m => m.UserID)

    @Html.LabelFor(m => m.UserName)                     
    @Html.TextBoxFor(m => m.UserName)
    ...
    <input type="submit" value="Submit">
}

这是javascript代码

    $('form', dialog).submit(function () {
        // Do not submit if the form does
        // not pass client side validation
        if (!$(this).valid()) {
            writeError("Validation failed!");
            return false;
        }

        // On the line below: I retrieve the POST url + serialize all submitted data from my form
        $.post($(this).attr('action'), $(this).serialize(), function (data, status) {
              ...
              ...
        }).error(function (error, status, a, b) {
            alert('Error!');
        });
        // Unbind form submitting
        $('form', dialog).unbind();
        return false;
    });

当我调试我的代码(一步一步)时,我可以注意到几点:

  • 表单被我的 jquery 函数提交并拦截
  • UserAlreadyExists 被触发(为什么?)。在这个函数中(在第二行)我有: var user = _requestServiceClient.GetUserFromUserName(userName); 当踩到这条线时,我突然进入了编辑的后期动作。奇怪的!?稍后,它退回到函数 UserAlreadyExists。还是很奇怪!?

我不知道问题是否出在我的代码中,或者我的 jquery.validate.min.js 版本是否已过时且存在错误或其他问题......

我注意到,如果我不使用任何 AdditionalFields,我就没有任何问题!!

我还注意到,如果我触发 UserAlreadyExists 自愿(通过专注于该领域),我在提交(发布)时没有任何问题!

因此,当显示 Edit 表单且 UserName 字段未聚焦时,我遇到了问题!然后我提交,问题来了

谢谢。

4

0 回答 0