Диалог Jquery при отправке возвращает данные Json в белом окне просмотра
Когда я нажимаю кнопку Сохранить, я возвращаюсь из моего контроллера это:
return Json(new { success = true });
и вся область просмотра моего браузера белая, и в левом верхнем углу я вижу мои данные json, которые я возвратил:
{"success":true}
Вопрос: Что мне нужно изменить, чтобы этот белый видовой экран был исправлен?
Я ожидаю проверки на успех: true/false на стороне клиента и в зависимости от значения я закрываю диалог или изменяю некоторые данные, и сайт, который вызвал диалог, должен остаться.
$(document).ready(function () {
// the div holds the html content
var $dialog = $('<div></div>')
.dialog({
autoOpen: false,
title: 'This is the dialogs title',
height: 400,
width: 400,
modal: true,
resizable: false,
hide: "fade",
show: "fade",
open: function (event, ui) {
$(this).load('@Url.Action("Create")');
},
buttons: {
"Save": function () {
var form = $('form', this);
$(form).submit();
},
"Close": function () {
$(this).dialog("close");
}
} // no comma
});
$('#CreateTemplate').click(function () {
$dialog.dialog('open');
// prevent the default action, e.g., following a link
return false;
});
});
</script>
Создать вид:
@using (Html.BeginForm("JsonCreate", "Template"))
{
<p class="editor-label">@Html.LabelFor(model => model.Name)</p>
<p class="editor-field">@Html.EditorFor(model => model.Name)</p>
<p class="editor-field">@Html.ValidationMessageFor(model => model.Name)</p>
}
ОБНОВИТЬ
"Save": function () {
var form = $('form', this);
debugger;
$.ajax({
url: this.action,
type: 'POST',
data: form.serialize(),
dataType: 'json',
success: function (result) {
debugger;
if (result.success) {
$(this).dialog("close");
// Update UI
}
else {
// Reload the dialog to show model errors
$(dialog).html(result);
} // else end
} // success end
}); // ajax post end
},
Действиеконтроллера POST:
[HttpPost]
public ActionResult JsonCreate(Template template)
{
if (ModelState.IsValid)
{
_templateDataProvider.AddTemplate(template);
return Json(new { success = true });
}
return Json(new { errors = GetErrorsFromModelState() });
}
1 ответ
Решение
Вы должны сделать Ajax submit, чтобы страница оставалась на том же URL:
"Save": function () {
var form = $('form', this);
//$(form).submit();
$.post(form.prop('action'), form.serialize(), function(response){
//do something with response data or ignore it
}, 'json');
},