У меня есть вид, из которого можно запустить модальное всплывающее окно для ввода данных:
<span class="AddLink ButtonLink">New Album</span>
<div id="AlbumDialog" title="" class="Hidden"></div>
<script type="text/javascript">
$(function () {
$("#AlbumDialog").dialog({
autoOpen: false, width: 600, height: 400, modal: true,
buttons: {
"Save": function () {
//MAYBE DO VALIDATION HERE??? HOW TO CALL CONTROLLER?
$.post("/Music/CreateAlbum",
$("#_AlbumDialog").serialize(),
function (data) { //OnSuccess
$("#AlbumDialog").dialog("close");
});
},
Cancel: function () {
$(this).dialog("close");
},
}
});
$(".AddLink").click(function () {
$("#AlbumDialog").html("")
.dialog("option", "title", "Add Album")
.load("/Music/CreateAlbum", function () { $("#AlbumDialog").dialog("open"); });
});
});
</script>
И мой строго типизированный частичный вид, который загружается всплывающим окном:
@model Models.ViewAlbum
<h2>Add Album</h2>
@using (Html.BeginForm("CreateAlbum", "Music", FormMethod.Post, new { id = "_AlbumDialog" }))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Artist,"Artist Name")
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Artist)
@Html.ValidationMessageFor(model => model.Artist)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Title, "Album Title")
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Title)
@Html.ValidationMessageFor(model => model.Title)
</div>
</fieldset>
}
Проблема, с которой я сталкиваюсь, заключается в том, что я никогда раньше не работал с «всплывающими окнами», и я хочу иметь возможность выполнять проверку с использованием моих контроллеров, как я привык. Таким образом, мой контроллер имеет этот метод, вызываемый при отправке из всплывающего окна:
[HttpPost]
public ActionResult CreateAlbum(ViewAlbum album)
{
if (AlbumRepository.Exists(album)== false)
{
if (ModelState.IsValid)
{
AlbumRepository.Save(album);
return RedirectToAction("ViewAlbums");
}
return PartialView("_AlbumDialog"); //HOW TO RETURN TO POPUP?
}
ModelState.AddModelError("Artist", "An identical album allready exist.");
ModelState.AddModelError("Title", "An identical album allready exist.");
return PartialView("_AlbumDialog"); //HOW TO RETURN TO POPUP?
}
Пока все хорошо, НО это НЕ возвращает состояние всплывающему окну! : /
Вопросы:
Как сделать так, чтобы во всплывающем окне отображались ошибки (без закрытия в первую очередь), которые мешают контроллеру сохранить введенные данные (как в обычном представлении с проверкой)?
Есть ли простой способ сделать это без написания целой связки jquery, так как я предпочитаю писать тестируемый C # (я не гроссмейстер jquery :)).
Примечание:
Я прочитал много вещей в сети о том, как это сделать, но этот подход - самый плавный, который мне удалось найти. Я все еще думаю, что мне приходится писать много вопросов, но после нескольких часов серфинга мне пришлось начинать, если я не хотел умирать от разочарования :).
Надеюсь, кто-то там, в большом киберпространстве, может дать мне пару советов:).
С уважением.