【问题标题】:Form loaded using partial view, show the reponse使用局部视图加载的表单,显示响应
【发布时间】:2017-03-20 16:35:50
【问题描述】:

我正在使用 ajax 加载部分视图的内容,并通过填充 div 的 html 将返回的 HTML 直接输出到页面。这是ajax:

 $.ajax({
                    data: { productId: productId },
                    datatype: "text/plain",
                    type: "GET",
                    url: theUrl,
                    cache: false,
                    success: function (data) {
                        $("#contentArea").html(data);
                    }
                });

这一切都按预期工作。根据多种因素,部分视图中的实际 html 会有所不同,其中一种可能的情况会返回一个要求一些反馈的表单。

我有客户端验证在这个表单上工作,但服务器端验证不合作。

我的验证是 FluentValidation 并且在我的控制器中我有这几行(myValidator 是我的 FluentValidation 验证器并且工作正常):

var valResult = myValidator.Validate(myRequest);
if (!valResult.IsValid) return Redirect(Request.UrlReferrer);

这一半有效,只要数据无效,IsValid 检查就会失败,但是我的重定向只是在没有服务器端验证消息的情况下再次重新加载页面。大概这是因为我正在使用重定向。

鉴于我正在使用 ajax 动态加载此表单,我如何让它重新加载页面但验证消息到位?

【问题讨论】:

    标签: c# asp.net-mvc fluentvalidation


    【解决方案1】:

    您需要将验证错误写回 ViewModel 并将其发送回视图本身。我是这样做的:

    var mailValidator = new Models.Dokumentacija.Validation.DokumentacijaMailValidation();
    var mailValidatorResult = mailValidator.Validate(vm.MailPodatki);
    if (!mailValidatorResult.IsValid)
    {
        ModelState.Clear();
        foreach (var error in mailValidatorResult.Errors) ModelState.AddModelError(string.Format("MailPodatki.{0}", error.PropertyName), error.ErrorMessage);
        return View(vm);
    }
    

    然后您应该返回您的 ViewModel(现在带有错误消息),所以我认为您的重定向将不起作用。可以return PartialView("_myPartial", vm);吗?

    【讨论】:

    • 我能够处理验证错误并更改显示它们的方式,因此将其标记为答案。谢谢。
    猜你喜欢
    • 2018-05-07
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多