我有一个 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 字段未聚焦时,我遇到了问题!然后我提交,问题来了
谢谢。