0

我有一个使用 Entity 的对话框foo
保存此对话框中的值后,我执行以下操作:

    $('#SaveEditPQ').submit(); //jquery submit
    $("#NewQuickDlg.results").remove();  // clear the fields within the dialog Box
    $("#AddQuickDlg").dialog("close");   // close the dialog box.


现在......当我尝试使用(元数据)验证时,问题就来了。ModelState.IsValid如果为假,我想保持对话框打开。

这可以通过扩展我的实体的值来非优雅地解决foo,该值将获得的值ModelState.IsValid并将我的 Jquery 更改为:

$('#SaveEditPQ').submit(); 
    if ('@Model.IsValidVariable'==true)
    {
    $("#NewQuickDlg.results").remove(); 
    $("#AddQuickDlg").dialog("close");  
    }

这是最好的方法吗?

4

1 回答 1

1

我在同一个问题上苦苦挣扎,但我用不同的方式解决了它。我不想用隐藏变量污染我的模型来关闭对话框,所以我所做的就是重定向到共享的 _close 部分视图。然后在我的帖子之后,检查关闭的 div 是否存在并关闭对话框。所以我的查询看起来像

$(document).on('click', "#SaveButton", function () {
    $.ajax({
        url: "/controller/Edit",
        type: "POST",
        data: $("form").serialize(),
        error: function (data) {
            var errorMessage = $.parseJSON(data.responseText);
        },
        success: function (data) {
            if (data) {
                if ($(data).attr('id') == 'close') {
                    $("#myDialog").dialog('close');
                }
                $("#myDialog").html(data);
                $("form :input:visible:enabled:first").focus();
            }
            else {
                $("#myDialog").html('no data');
            }
            return false;
        }
    });

所以现在我在对话框中看到了服务器端验证。

这是控制器方法

    [HttpPost]
    public ActionResult SaveEdit(SomeType viewModel)
    {
        if (!ModelState.IsValid)
        {
            PopulateDropDowns(viewModel);

            return PartialView(viewModel);
        }

        var someObject= _objectRepository.Get(viewModel.Id);

        //make some changes to someObject

        _objectRepository.Save(someObject);

        return PartialView("_close");
    }

所以这也遵循PRG模式

于 2012-09-06T14:40:25.370 回答