我有一个我在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 %>
答案 0 :(得分:1)
这实际上取决于您在发布表单后从哪里获取内容。验证摘要是在服务器上创建的,因此您必须完成工作。
作为示例,我在.ascx文件中使用了一些部分内容来呈现表单。您可以通过Html.RenderAction
您可以在.ascx文件中使用Ajax.BeginForm
等。然后直接在动作中调用它。
当从浏览器进行Ajax调用时,您可以将其发布到相同的操作。这样您就可以进行通常的所有服务器端验证。您应该设置Ajax调用,以使用操作返回的新html替换原始表单。
你需要注意的一件事是,替换JavaScript将替换元素的内容而不是元素本身,所以请记住周围元素的id。
道歉,如果你有点复杂,如果你想要更多的细节只是评论,我会充实相关的位。
所有这些都假定您正在服务器上进行所有验证。
您将拥有一个包含所有页面内容的View,然后是.ascx文件中的部分内容,这是您的ajax表单所在的位置,需要设置为按id替换内容。如果它与你的ajax将要调用的动作同名,那么它是最简单的。
您可以使用Html.RenderAction
将其置于视图中。您还可以使用相同方法的其他版本传递数据。你基本上就像你的ajax代码一样调用它。
您需要将所有内容包装在ID设置的div中。在partial中使用此id作为要替换的内容。
当您呈现页面时,表单的html和所有ajax内容都将被放入。
当调用ajax动作时,将返回部分内容并执行任何验证。它将替换您提供id的div的内容。
您可以使用[AcceptVerbs(HttpVerbs.Get)]
和[AcceptVerbs(HttpVerbs.Post)]
属性
这个方法的主要问题是它不是自包含的,带有id的div是局部的外部。