对话框内的模型验证

Model validation inside dialog

我正在为我的应用程序使用 MVC 5,用户可以在其中创建具有零到多个 Bars 的 Foo。

我为 Foo 调用的创建视图 HTML.EditorForModel() 加载了 Foo 的编辑器模板。我的 Foo 模板有 HTML.BeginForm 标签和对 Html.EditorFor(model => Model.Bar) 的调用,它为没有 Form 标签但使用 BeginCollectionItem 的 Bar 加载了一个编辑器模板帮手。所以最终结果是 Foo 和 Bar 模型都在一个 Foo 表单中。

当用户单击 "Add new Bar" 按钮时,Ajax 调用会附加新的 Bar 模板并将其显示在 Jquery UI 对话框中 - 每次附加后我我正在重新解析表单,以便验证选择新字段。在提交给控制器时,Foo 和 Foo.Bars 都得到了正确的 posted。耶!

我的问题是对话框中的验证未触发。如果我删除对话框并仅在 DOM 验证中公开 Bar 字段,效果很好。我认为这是因为对话框中的内容(Bar 模板)不包含 Form 标签。但是,如果我将表单标签添加到 Bar 模板,那么控制器的 post 就会失败。

在这种情况下,当对话框打开时,是否可以在对话框中进行模型验证?

回答了我自己的问题。默认情况下,jQuery 对话框附加在 body 标签之前,因此它不在表单内。我使用对话框的 "appendTo" 选项将其附加到标签。