【问题标题】:ModelState and Dialog Boxes模型状态和对话框
【发布时间】:2012-08-31 05:33:05
【问题描述】:

我有一个使用实体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");  
    }

这是最好的方法吗?

【问题讨论】:

    标签: jquery asp.net-mvc-3 razor modelstate


    【解决方案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 模式

    【讨论】:

    • 感谢您的回答。暂时转到一个新问题...尝试一下,然后将结果回复给您 :)
    猜你喜欢
    • 2013-12-01
    • 2021-04-14
    • 2013-08-26
    • 1970-01-01
    • 2013-02-27
    • 2016-08-31
    • 2011-04-04
    • 2016-04-03
    • 2014-11-02
    相关资源
    最近更新 更多