使用局部视图加载表单,显示响应

时间:2017-03-20 16:35:50

标签: c# asp.net-mvc fluentvalidation

我正在使用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动态加载此表单,我如何让它重新加载页面但是验证消息到位?

1 个答案:

答案 0 :(得分:0)

您需要将验证错误写回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(现在有错误信息),所以我认为你的Redirect不起作用。你能做return PartialView("_myPartial", vm);吗?