【问题标题】:MVC: used partial view for jquery modal popup, issues with validationMVC:用于 jquery 模式弹出的部分视图,验证问题
【发布时间】:2023-04-01 20:43:01
【问题描述】:

所以我在视图中有一个按钮,可以打开一个模态弹出表单。这个模态弹出表单是一个部分页面。我的问题是:

每当我没有填写表单上的必填字段时,TryUpdate 检查显然会失败,但它只会刷新 jquery 上“window.location.reload”行的整个页面。我想要做的是,它不会刷新,而是保持原样(显示模式的页面),并且验证摘要或验证会显示,这个和那个是必需的。这是可能的还是我把事情复杂化了?

<script type="text/javascript">
    $(document).ready(function () {
        $(function () {
            $('#modal-link').click(function () {
                var href = this.href;
                $('#load-modal').dialog({
                    modal: true,
                    draggable: false,
                    position: "top",
                    open: function (event, ui) {
                        $(this).load(href, function (result) {
                            $('#new-academy-form').submit(function () {
                                $.ajax({
                                    url: this.action,
                                    type: this.method,
                                    data: $(this).serialize(),
                                    success: function (json) {
                                        window.location.reload(true);
                                    },
                                    error: function (data) {
                                            var errmessage = '<div class="error-repo">Error</div>';
                                            $('#messages').html(errmessage);
                                        }
                                });
                                return false;
                            });
                        });
                    }
                });
                return false;
            });
        });
    });
</script>

这是按钮:

<div class="width3">
                <%: Html.ActionLink("Submit New", "Create", "Propose", null, new { @class = "results", id = "modal-link" })%>
            </div>

这是动作:

public ActionResult Create()
        {
            return PartialView(Propose.LoadDetails(context, null));
        }

        [HttpPost]
        public ActionResult Create(FormCollection formCollection)
        {
            Propose propose= new Propose ();
            if(TryUpdateModel(propose, "Propose ")){
                context.Propoe.Add(propose);
                context.SaveChanges();
                var proposals = new System.Text.StringBuilder();
                return Json(new { propose= proposals});
            }
            return PartialView(Propose.LoadDetails(context, null));
        }

【问题讨论】:

  • 您可以从您的操作中返回一个状态代码,让您确定是否应该重新加载整个页面。 jQuery AJAX 错误回调只有在发生实际错误时才会被触发。或者,您可以返回指示错误的 HTTP 状态代码,如下所示:stackoverflow.com/q/4707755/453277
  • 所以你真的不能再使用通常的 助手了吗?在那个部分页面上?

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


【解决方案1】:

您可以从您的操作中返回一个标志。

var data = new {isSuccess, new { propose= proposals}};
return Json(data ,  JsonRequestBehavior.AllowGet);

然后像

一样在 jquery 中使用它
success: function (data) {
if(data.isSuccess){
    window.location.reload(true);
}
else{
   // write code to show validation summary and no reload.
}
}

【讨论】:

    猜你喜欢
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 2013-05-10
    相关资源
    最近更新 更多