问题描述
||
我有一个视图,可以从中启动用于输入数据的模式弹出窗口:
<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大师:)。
注意:
我已经在网上阅读了很多有关如何执行此操作的内容,但是这种方法是迄今为止我所能找到的最流畅的方法。我仍然认为这是我必须写的很多jquery,但是经过数小时的冲浪,如果我不想死于挫败感,就必须开始学习:)。
希望有人在大型网络空间中能给我一些指示:)。
亲切的问候。
解决方法
我昨晚完全按照您的意愿去做。看到这个问题。我有一个呈现到模式对话框的局部视图。当它在客户端有效(mvc3验证)时,我在服务器端验证。如果可以,我是否刷新页面。如果有错误,我将以模态显示视图。