2
我有一個帶有RemoteValidation屬性的模型。遠程驗證對文本框失去焦點有效,但ModelState.IsValid始終爲真
當我輸入數據庫中已經存在的「測試」,並且點擊除OK按鈕之外的區域時,我得到紅色:「測試已經存在」。到現在爲止還挺好。當我點擊那麼OK buttona帖子完成創建行動,我要求
ModelState.IsValid它總是正確的?
因此,數據被輸入數據庫,我得到一個重複的異常...
我知道這工作之前,我的網站,我只是改變了一些東西,顛覆不是
激活arghhh ...
我該怎麼做?
[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);
}
});
}
在另一個線程(猜哪一個:P),你寫了,我可以覆蓋RemoteAttribute.IsValid是,也適用於我的情況? – Elisabeth
是的,你可以覆蓋它,在這種情況下,ModelState.IsValid將被設置爲正確的值。 –
這樣做的效果是我不需要創建操作中的ReleaseExists調用,但是可能會出現競爭條件,比如用戶在「確定」按鈕上點擊「測試」數據點擊文本框時,我的Create操作可能會更快地被調用比ReleaseExists操作可以返回false。你覺得一樣嗎? – Elisabeth