Отобразить сообщение об ошибке во всплывающем окне jQuery или в предупреждении в MVC 4
Я использую DataAnnotation для проверки, я хочу показать сообщение об ошибке (Data annotation) во всплывающем окне (диалог / предупреждение) вместо того, чтобы показывать его на виде.... Я реализовал код, используя эту ссылку..
Шаблон проекта Mobile. Дайте мне знать, если я что-то упустил?? http://forums.asp.net/t/1738076.aspx/1
Javascript: -
$('#Test').bind('invalid-form.validate', function (form, validator) {
alert('InsideTest');
var $list = $('#errorlist ul:first')
if ($list.length && validator.errorList.length) {
$list.empty();
$.each(validator.errorList, function () {
$("<li />").html(this.message).appendTo(list);
});
$list.dialog({
title: 'Please correct following errors:',
});
}
});
Forgot to add html...
About.cshtml: -
@model WRDSMobile.Models.Test
<div id="errorlist" style="display:none"><ul></ul></div>
@using (Html.BeginForm(null, null, FormMethod.Post, new { name = "Test", id = "Test" }))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Test</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Age)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Age)
@Html.ValidationMessageFor(model => model.Age)
</div>
<input type="submit" value="Create" />
</fieldset>
}
3 ответа
Добавьте следующие CSS/JS в качестве ссылок jquery-ui.css, jquery-1.8.2.min.js, jquery-ui-1.8.24.min.js, jquery.validate.min.js, jquery.validate.unobtrusive.min.js
$(document).ready(function () {
$('#Test').bind('invalid-form.validate', function (form, validator) {
var $list = $('<ul />')
if (validator.errorList.length) {
$.each(validator.errorList, function (i, entity) {
$("<li />").html(entity.message).appendTo($list);
});
msgbox('Please correct following errors:', $('<div />').append($list));
return false;
}
});
});
function msgbox(_title, _messageHtml) {
$('<div></div>').appendTo('body')
.html(_messageHtml)
.dialog({
modal: true, title: _title, zIndex: 10000, autoOpen: true,
width: 'auto', resizable: false,
buttons: {
Ok: function () {
// $(obj).removeAttr('onclick');
// $(obj).parents('.Parent').remove();
$(this).dialog("close");
}
},
close: function (event, ui) {
$(this).remove();
}
});
};
Я не уверен, что понимаю ваш вопрос, но вы можете заложить пост в свой контроллер и вернуть частичное представление. Затем загрузите частичное представление в ваш HTML-элемент и затем откройте его в диалоговом окне.
[HttpPost]
public ActionResult validate(string firstName,string lastName){
//logic here for validation
return PartialView();
}
$.ajax({
type: "POST",
data: {firstName: nameVal, lastName: lastNameVal },
url: "/myController/validate",
dataType: "html",
success: function (data) {
if (data) {
var dialog = $('<div></div>');
dialog.html(data);
dialog.dialog({
resizable: false,
modal: true,
overflow: false,
maxWidth: 1200,
maxHeight: 600,
width: 1200,
height: 600,
border: 0,
buttons: {
"Cancel": function () { //cancel
$(this).dialog("close");
}
}
});
}
else {
alert("error");
}
}
});
Открытый статический метод void (это ModelStateDictionary modelState)
{
StringBuilder errors = new StringBuilder();
try
{
foreach (ModelState model_State in modelState.Values)
foreach (ModelError error in model_State.Errors)
errors.AppendLine(error.ErrorMessage.ToString());
if (errors.Length > 1)
throw new Exception();
}
catch (Exception ex)
{
throw new // your validation helper
}
}
поймать это в диалоге ajax sucess false open jquery с этим сообщением об ошибке Примечание: используйте обработчик ошибок mvc, он отправит сообщение об ошибке с ajax success= false