AJAX 表单上的流畅验证

发布于 2024-12-08 11:59:01 字数 224 浏览 0 评论 0原文

我正在 ASP.net MVC 中创建一个操作/视图,我想使用 AJAX / jQuery 进行 POST。 我正在使用 Fluent Validation 在视图模型中进行验证。

当我这样做时是否可以进行客户端验证?为了使用流畅验证触发客户端验证,脚本会是什么样子?

我是否创建一个常规表单并使用 jquery 创建一个提交事件并调用某些内容,或者只是使用 Ajax.BeginForm() 来代替?

I am creating an action/view in ASP.net MVC that I would like to POST using AJAX / jQuery.
I am using Fluent Validation for the validation in my view models.

Is it possible to have client side validation when I do this? What would the script look like in order to trigger this client side validation using fluent validation?

Do I create a regular form and create a submit event using jquery and call something or would I just Ajax.BeginForm() instead?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怪异←思 2024-12-15 11:59:01

我使用带有数据注释的 jQuery 不显眼验证,但看起来您需要与我相同的设置(下面的前两个选项)加上另一个步骤:

  • 在您的视图或 web.config 中启用客户端验证
  • 在您的视图或 web 中启用不显眼验证.config
  • 将 FluentValidationModelValidatorProvider 添加到 ModelValidatorProviders 集合

对于前两个,请参阅 启用客户端验证< /a>.对于最后一个,请参阅 Fluent 验证:与 ASP.NET MVC 集成

如果您想通过 AJAX 提交表单,您可以使用 $('#form_selector').valid() 触发整个表单的验证,或使用 $(' 触发单个输入的验证#input_selector').valid()。如果验证成功,则对 valid() 的调用将返回 true(否则返回 false)。

I use the jQuery unobtrusive validation with data annotations but it looks like you need the same settings as me (the first two options below) plus another step:

  • Enable client validation in your view or web.config
  • Enable unobtrusive validation in your view or in web.config
  • Add the FluentValidationModelValidatorProvider to the ModelValidatorProviders collection

For the first two, see Enabling Client-Side Validation. For the last one see Fluent Validation: Integration with ASP.NET MVC.

If you want to submit the form via AJAX, you can trigger the validation on the whole form with $('#form_selector').valid() or on an individual input with $('#input_selector').valid(). The calls to valid() return true if the validation is successful (and false if not).

风尘浪孓 2024-12-15 11:59:01

Fluent Validation 是一个服务器端验证库。因此,Fluent Validation 支持一些基本的客户端验证(如 required、maxlength 等)。您不能在客户端使用所有服务器端规则。

如果您想向 Fluent Validation 添加完整的客户端支持,则需要在项目中再添加一个库。 表单助手可以解决您的问题。

https://github.com/sinanbozkus/FormHelper

您需要像这样创建表单:

var formConfig = new FormConfig(ViewContext)
{
    FormId = "ProductForm",
    FormTitle = "New Product",
    BeforeSubmit = "ProductFormBeforeSubmit", // optional
    Callback = "ProductFormCallback" // optional,
};

// <form id="@formConfig.FormId" asp-controller="Home" asp-action="Save"
// ...

@await Html.RenderFormScript(formConfig)

之后您需要将 [FormValidator] 属性添加到您的操作中。

[HttpPost, FormValidator]
public IActionResult Save(FormViewModel viewModel)

现在,所有 Fluent Validation 规则都可以在客户端运行。

Fluent Validation is a server-side validation library. Because of this, Fluent Validation supports some basic client-validations (like required, maxlength etc.) You can't use all server-side rules on client-side.

If you want to add fully client-side support to Fluent Validation, you need to add one more library to your project. Form Helper can be a solution for your problem.

https://github.com/sinanbozkus/FormHelper

You need to create your forms like this:

var formConfig = new FormConfig(ViewContext)
{
    FormId = "ProductForm",
    FormTitle = "New Product",
    BeforeSubmit = "ProductFormBeforeSubmit", // optional
    Callback = "ProductFormCallback" // optional,
};

// <form id="@formConfig.FormId" asp-controller="Home" asp-action="Save"
// ...

@await Html.RenderFormScript(formConfig)

After that you need to add [FormValidator] attribute to your action.

[HttpPost, FormValidator]
public IActionResult Save(FormViewModel viewModel)

Now all Fluent Validation rules work on client-side.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文