正确使用部分视图,验证和导航的jQuery对话框

时间:2011-04-21 18:19:55

标签: asp.net-mvc-2 jquery-ui jquery-validate data-annotations

我正在开发一个ASP.NET MVC 2应用程序,并且正在努力从我的一个页面中的对话窗口中获得所需的行为。可以把它想象成Visual Studio中的“添加新项”窗口。

当用户单击主页面上的按钮时,我使用jQuery对话框插件显示包含表单的部分视图。局部视图是强类型,Model类中使用DataAnotations来定义验证规则。当用户使用有效数据提交表单时,我会导航到另一个页面。

以下是我的问题:

  1. 提交“开箱即用”表单(无需额外代码)会让一切变得混乱,因为将视图返回给客户端会将其作为主页面发送,而不再是局部视图。当我想要离开并使用我的Action方法中的一个RedirectXYZ重载时,这很好。但是当我想仅返回部分返回显示验证错误时,这是​​一个主要问题。

  2. 验证。我希望能够在缺少必要字段等时向用户提供反馈。使用DataAnnotations意味着我必须能够将页面发布回服务器,检查ModelState.IsValid并返回相同的视图,如果为false 。正如我在第一个项目符号中所说,这不适用于部分视图。而且,虽然我可以通过包含MicrosoftXYZ.js文件来启用AJAX验证支持,但它们并没有绑定到jQuery对话框的提交按钮,因此无效并不会阻止提交。 (另外,如果可能的话,我不想修复jQuery和AJAX代码。)

  3. 我尝试启用表单的AJAX发布(使用jQuery表单插件),但没有使用DataAnnotations的jQuery验证,我回到原点(加上我必须弄清楚如何在成功提交时重定向页面)。

    我不能成为第一个尝试在需要验证的jQuery对话框中显示包含表单的局部视图的人。非常感谢任何帮助,因为我已经失去了整整一天试图寻找解决方案。

1 个答案:

答案 0 :(得分:1)

因为您正在使用Javascript弹出窗口并将数据发送到服务器,所以我建议您使用Ajax。所以它将按预期工作。如果用户单击保存,则表示您的弹出窗体已在客户端上提交并保存和关闭(并且很可能刷新弹出窗口的主页)。

验证

反正。 This blog post不会完全回答您的问题,但它可以让您在使用更合适的Ajax请求时处理模型验证错误。它详细解释了这个问题,并提供了可以按原样使用的代码。

重定向

关于HTTP重定向,它有点复杂,因为浏览器以不同的方式执行这些操作。无论如何。不同的stackoverflow question会尝试回答这个问题。