在开始之前,我确实有一个非常特别的问题,如果您想回答它,请直接问到最后。但我确实欢迎评论和建议,因此这篇文章很长。
好的,我们处理了很多表单,其中一些表单非常冗长,并且有很多字段。我们还有一个要求——除了顶级字段——能够有可变数量的重复行——我们称之为。例如,让我们考虑一个有名字、姓氏和年龄的客户,而它可以有零个或多个地址(比如 0 到 10),因此用户必须能够在填写表单时从表单中添加或删除联系人。所以通常用户获取和“添加”按钮以添加更多地址,每个地址旁边有一个删除按钮。可能会有多个相同形式的重复部分,但我不会去那里。关键是,由于法律和历史原因,所有表格必须一次保存,这样虽然表格可以编辑,但我们不能接受半填的表格,并有另一个页面供用户添加和删除地址,例如
我正在使用 ASP NET MVC 2(具有单个通用 Controller 的强类型 View )和客户端验证和繁重的 jquery 脚本以实现华丽的功能。我们可能很快就会迁移到 ASP NET MVC 3,我已经在使用 3 来寻找一个好的解决方案。这些地址在模型上定义为 List<Address>
,例如
我目前对此问题有一个有效的解决方案,但我对此并不满意:我有一个 HTML 助手,它命名添加或删除按钮和一些 JavaScript 来禁用验证并允许回发表单(甚至无效)和因为我可以找出被点击的按钮的名称,所以我有所有必要的逻辑来处理添加或删除并且工作得非常好。
但是我正在发回并重新加载表单,我正在寻找替代解决方案。以下是我可以做的:
remove()
元素。我只需要重命名我所做的索引。我们正在使用 jquery 日历,它破坏了我也修复的新元素。但是验证不起作用,它可能可以与 ASP NET MVC 一起使用,但是这个解决方案看起来非常脆弱 - 在添加另一张卡之前看起来很棒的纸牌屋。 好的,最后一个是我正在处理的,但有一个问题。只有当表单被
BeginForm()
吞没时,具有非侵入式验证的 ASP NET MVC 3 才有效。而我的顶级 View 有一个 BeginForm()
但不是我的部分观点。当我从 View 中调用它而不是在 ajax 调用中只获取重复部分时,它运行良好。 (题)
那么有没有办法告诉 ASP NET MVC 3 吐出验证数据属性,而不管是否在 BeginForm() 块中?老实说,如果这不是错误,这绝对是一个重要的功能请求。 我实际上已经使用反射器来反汇编代码,并且条件似乎存在。
最佳答案
简答:
将此添加到部分 View :
if (ViewContext.FormContext == null)
{
ViewContext.FormContext = new FormContext();
}
关于asp.net-mvc - ASP NET MVC : Dynamically adding or removing inputs on the form - unobtrusive validation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4897502/