ASp .Net MVC 3.0,Razor-验证来自弹出表单的输入

问题描述

|| 我有一个视图,可以从中启动用于输入数据的模式弹出窗口:
<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验证)时,我在服务器端验证。如果可以,我是否刷新页面。如果有错误,我将以模态显示视图。