【问题标题】:How can I use Html.ValidationSummary with Ajax.BeginForm?如何将 Html.ValidationSummary 与 Ajax.BeginForm 一起使用?
【发布时间】:2008-11-14 03:38:25
【问题描述】:

我在 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 %>

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    这实际上取决于表单发布后您从何处获取要显示的内容。验证摘要是在服务器上创建的,因此您必须在其中完成工作。

    例如,我使用 .ascx 文件中的一些部分内容来呈现表单。通过直接使用Html.RenderAction 调用操作,您第一次在页面中获取表单

    您的Ajax.BeginForm 等将包含在 .ascx 文件中。然后直接在一个动作中调用它。

    当从浏览器发出 Ajax 调用时,您可以将其发布到相同的操作。这样,您就可以像往常一样进行所有服务器端验证。您应该设置 Ajax 调用以将原始表单替换为操作返回的新 html。

    您必须注意的一件事是,替换 JavaScript 将替换元素的 content 而不是元素本身,因此请记住周围元素的 id。

    抱歉,如果这有点令人费解,如果您想了解更多详细信息,请发表评论,我会充实相关部分。

    额外细节:

    所有这些都假设您在服务器上进行所有验证。

    您将拥有一个包含所有页面内容的视图,然后是 .ascx 文件中的一些部分内容,这是您的 ajax 表单所在的位置,需要将其设置为用 id 替换内容。如果它与您的 ajax 将要调用的操作具有相同的名称,则最简单。

    您可以使用Html.RenderAction 将其放入视图中。您还可以使用相同方法的其他版本传入数据。您基本上以与您的 ajax 代码相同的方式调用它。

    您需要将它全部包装在一个带有 id 集的 div 中。在部分中使用这个 id 作为要替换的内容。

    当您呈现页面时,表单的 html 和所有 ajax 内容都会被放入。

    当调用 ajax 操作时,将返回部分内容并执行任何验证。它将替换您提供 id 的 div 的内容。

    您可以使用[AcceptVerbs(HttpVerbs.Get)][AcceptVerbs(HttpVerbs.Post)] 属性拥有不同版本的操作

    这种方法的主要问题是它不是自包含的,带有 id 的 div 在部分外部。

    【讨论】:

    • 如果您能对此进行一些扩展,那就太好了。我认为您的答案是正确的,但可能会更清楚。
    猜你喜欢
    • 2012-11-08
    • 2013-07-24
    • 1970-01-01
    • 2010-09-23
    • 2011-07-21
    • 1970-01-01
    • 2012-03-10
    • 2021-01-02
    • 1970-01-01
    相关资源
    最近更新 更多