gpt4 book ai didi

asp.net-mvc - 远程验证适用于失去焦点的文本框,但 ModelState.IsValid 始终为真

转载 作者:行者123 更新时间:2023-12-04 05:44:48 26 4
gpt4 key购买 nike

我有一个带有 RemoteValidation 属性的模型。

当我输入数据库中已经存在的“test”并单击“确定”按钮以外的区域时,我会看到红色:“test already exists”。到现在为止还挺好。当我点击然后 OK buttona 帖子完成了我要求的创建操作

ModelState.IsValid 始终为真???

因此,数据被输入到数据库中,我得到一个重复的异常...

我知道这以前在我的网站上有效,我只是改变了一些东西,而颠覆不是

激活啊……

我怎么了?

[HttpPost]
public ActionResult Create(Release release)
{
if (ModelState.IsValid)
{
_releaseDataProvider.AddRelease(release);
return Json(new { success = true });
}
return PartialView(release);
}

public JsonResult ReleaseExists(string Name)
{
bool releaseExists = _releaseDataProvider.ReleaseExists(Name);
if (!releaseExists)
{
return Json(true, JsonRequestBehavior.AllowGet);
}
else
{
return Json(false, JsonRequestBehavior.AllowGet);
}
}


$.ajaxSetup({ cache: false });

$(document).ready(function () {
$('#CreateRelease').click(function (event) { loadDialog(this, event, createRelease); });
});

function loadDialog(link, e, ajaxRequest) {

e.preventDefault();
var $title = link.innerHTML;
var $contenturl = $(link).attr('href');
var $dialog = $('<div></div>');
var $height = $(link).attr('data-dialog-height');
var $width = $(link).attr('data-dialog-width');

$dialog.load($contenturl).dialog({
title: $title,
autoOpen: true,
modal: true,
show: 'fade',
hide: 'fade',
width: $width,
height: $height,
buttons: {
"OK": function () {
ajaxRequest($(this), $('form', this));
},
"Cancel": function () {
$dialog.dialog("close");
}
}
});
}

function createRelease(dlg, form) {
$.ajax({
url: $(form).attr('action'),
type: 'POST',
data: form.serialize(),
success: function (response) {
if (response.success) {
dlg.dialog("close");
// Update UI
}
else {
// Reload the dialog with the form to show model/validation errors
dlg.html(response);
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(textStatus + '-' + XMLHttpRequest.responseText);
}
});
}

最佳答案

ModelState.IsValid which is always true ???



这是正常的,远程验证规则仅在您通过 AJAX 调用 Controller 操作时应用。同样的 Action 是 不是 当表单正常提交时调用。因此,您可以在 POST 操作中调用相应的验证方法:
[HttpPost]
public ActionResult Create(Release release)
{
if (ModelState.IsValid && !_releaseDataProvider.ReleaseExists(release.Name))
{
_releaseDataProvider.AddRelease(release);
return Json(new { success = true });
}
return PartialView(release);
}

关于asp.net-mvc - 远程验证适用于失去焦点的文本框,但 ModelState.IsValid 始终为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10822825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com