asp.net-mvc - 如何将 Html.ValidationSummary 与 Ajax.BeginForm 一起使用?

标签 asp.net-mvc

我在我的 MVC 项目中创建了一个 AJAX 表单。如果使用普通浏览器功能提交表单并且发生页面刷新,我会在表单中呈现验证信息(基于 ViewData.ModelState 的内置 MVC 验证)。

AJAX 表单是否有类似的验证机制?

<% using (Ajax.BeginForm("Create", "GraphAdministration", new AjaxOptions()
    {
        OnSuccess = "newGraphSuccess",
        OnFailure = "newGraphFailure",
        HttpMethod = "POST"
    }))
{ %>
    <!-- some form stuff in here !-->
<% } //end form %>

最佳答案

这实际上取决于您从何处获取要在表单发布后显示的内容。验证摘要是在服务器上创建的,因此您必须在服务器上进行工作。
例如,我在 .ascx 文件中使用了一些部分内容来呈现表单。您可以通过直接使用 Html.RenderAction 调用操作来第一次在页面中获取表单。
你会有你的 Ajax.BeginForm .ascx 文件中的等。然后直接在一个 Action 中调用它。
当从浏览器发出 Ajax 调用时,您可以将其发布到相同的操作。这样你就可以像往常一样进行所有的服务器端验证。您应该设置 Ajax 调用以使用操作返回的新 html 替换原始表单。
您必须注意的一件事是,replace JavaScript 将替换元素的内容而不是元素本身,因此请记住周围元素的 id。
抱歉,如果这有点令人费解,如果您想要更多详细信息,请发表评论,我将充实相关部分。
额外细节:
所有这些都假设您在服务器上进行所有验证。
您将拥有一个包含所有页面内容的 View ,然后是 .ascx 文件中的一些部分内容,这是您的 ajax 表单所在的位置,需要将其设置为按 id 替换内容。如果它与您的 ajax 将要调用的操作具有相同的名称,则最简单。
您可以使用 Html.RenderAction让它进入 View 。您还可以使用相同方法的其他版本传入数据。您基本上以与 ajax 代码相同的方式调用它。
您需要将其全部包装在一个带有 id 集的 div 中。在部分中使用此 id 作为要替换的内容。
当您呈现页面时,表单的 html 和所有 ajax 内容都将被放入。
当调用 ajax 操作时,部分内容将与执行的任何验证一起返回。它将替换您提供 id 的 div 的内容。
您可以使用 [AcceptVerbs(HttpVerbs.Get)] 获得不同版本的操作。和 [AcceptVerbs(HttpVerbs.Post)]属性
这种方法的主要问题是它不是自包含的,带有 id 的 div 是局部的外部。

关于asp.net-mvc - 如何将 Html.ValidationSummary 与 Ajax.BeginForm 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/289170/

相关文章:

asp.net - EF 使用代码优先和一对多关系创建重复的外键

asp.net-mvc - Kendo:处理Ajax数据请求中的错误

c# - 如何使用 EF6 获取 Controller 中任何属性的 [Display(Name ="")] 属性中的值

c# - 调试本地 IIS Web 服务器上托管的 ASP.NET MVC3 应用程序

asp.net - Autofac 实例注册的 SingleInstance() 是否能在 IIS AppDomain 回收中幸存下来?

asp.net - 需要一种在 ASP.NET Web 窗体应用程序的子文件夹中托管 ASP.NET MVC 文件的好方法

asp.net - DBContext.Entry 的作用是什么?

asp.net-mvc - 带区域的 Url.Action() 返回空字符串

c# - IHttpActionResult 方法无法返回 NotFound()

asp.net-mvc - @Html.PagedListPager 添加 CSS 类