在其中一個場景中,需要進行遠程驗證以確保不再輸入字段。ASP.NET MVC中的手動遠程驗證3
這可以使用ASP.NET MVC 3遠程驗證來完成,然而,這完美的作品中用來CREATE記錄的形式,而不是用來編輯記錄的形式,否則,它總會給我一個記錄已經存在的錯誤。
所以我需要這個編輯表單是發送ID /名稱列來驗證另一個具有相同名稱的記錄的存在,換句話說,我有任何其他記錄'以外的具有ID'有相同的「名稱」?
服務器端邏輯工作完美,問題在於jQuery在顯示jQuery UI對話框內的錯誤。我遵循jquery.validate.unobstrusive.js使用的相同方式。
在視圖本身,我運行了以下內容:
$(document).ready(function() { RemoteValidate({ formName: "CultureEditForm", inputName: "Name", inputId: "CultureId", url: "/Culture/CultureEditNameExists", dupTmpl: "dupTmpl" }); });
的RemoteValidate()函數如下:
RemoteValidate = function (options) { $('#' + options.formName + ' input[name=\"' + options.inputName + '\"]').live('blur', function() { var params = { name: $('#' + options.formName + ' input[name=\"' + options.inputName + '\"]').val(), id: $('#' + options.formName + ' input[id$=\"' + options.inputId + '\"]').val() } $.ajax({ url: options.url, type: "POST", data: JSON.stringify(params, null, 2), contentType: "application/json; charset=utf8", dataType: "json", success: function (response) { if (!response) { _onError(options.formName, options.inputName); } else { _onSuccess(options.formName, options.inputName); } } }); }); function _onError(formId, inputElement) { var container = $('#' + formId).find("[data-valmsg-for='" + inputElement + "']"), replace = $.parseJSON(container.attr("data-valmsg-replace")) !== false; container.removeClass("field-validation-valid").addClass("field-validation-error"); if (replace) { container.empty(); $('Name already exists').appendTo(container); } } function _onSuccess(formId, inputElement) { var container = $('#' + formId).find("[data-valmsg-for='" + inputElement + "']"), replace = $.parseJSON(container.attr("data-valmsg-replace")); if (container) { container.addClass("field-validation-valid").removeClass("field-validation-error"); if (replace) { container.empty(); } } } }
只要對話窗口打開時,我一直在努力值,並且它能夠「顯示/隱藏」錯誤消息。
但是,當我關閉對話框,然後單擊另一條記錄進行編輯時,它會以新值再次打開對話框,但是當它試圖向服務器發送請求以檢查數據庫中是否存在記錄時,它的發送先前記錄的數據已被編輯
我已經做了上面的行,以準備發送到服務器的對象的行。
任何幫助?
感謝