asp.net-mvc - ASP NET MVC : Dynamically adding or removing inputs on the form - unobtrusive validation

标签 asp.net-mvc asp.net-mvc-3 validation unobtrusive-javascript

在开始之前,我确实有一个非常特别的问题,如果您想回答它,请直接问到最后。但我确实欢迎评论和建议,因此这篇文章很长。

好的,我们处理了很多表单,其中一些表单非常冗长,并且有很多字段。我们还有一个要求——除了顶级字段——能够有可变数量的重复行——我们称之为。例如,让我们考虑一个有名字、姓氏和年龄的客户,而它可以有零个或多个地址(比如 0 到 10),因此用户必须能够在填写表单时从表单中添加或删除联系人。所以通常用户获取和“添加”按钮以添加更多地址,每个地址旁边有一个删除按钮。可能会有多个相同形式的重复部分,但我不会去那里。关键是,由于法律和历史原因,所有表格必须一次保存,这样虽然表格可以编辑,但我们不能接受半填的表格,并有另一个页面供用户添加和删除地址,例如

我正在使用 ASP NET MVC 2(具有单个通用 Controller 的强类型 View )和客户端验证和繁重的 jquery 脚本以实现华丽的功能。我们可能很快就会迁移到 ASP NET MVC 3,我已经在使用 3 来寻找一个好的解决方案。这些地址在模型上定义为 List<Address> ,例如

我目前对此问题有一个有效的解决方案,但我对此并不满意:我有一个 HTML 助手,它命名添加或删除按钮和一些 JavaScript 来禁用验证并允许回发表单(甚至无效)和因为我可以找出被点击的按钮的名称,所以我有所有必要的逻辑来处理添加或删除并且工作得非常好。

但是我正在发回并重新加载表单,我正在寻找替代解决方案。以下是我可以做的:

  • 在客户端做所有事情。 “添加”按钮将克隆此类地址之一,“删除”按钮将 remove()元素。我只需要重命名我所做的索引。我们正在使用 jquery 日历,它破坏了我也修复的新元素。但是验证不起作用,它可能可以与 ASP NET MVC 一起使用,但是这个解决方案看起来非常脆弱 - 在添加另一张卡之前看起来很棒的纸牌屋。
  • 使用 Ajax 发布整个页面,然后再次加载它:这可能比我当前的解决方案好,但只是稍微好一点。
  • 使用 ajax 发布表单并返回 JSON 并使用数据构建元素或删除它们:由于大量的客户端脚本,再次成为纸牌屋
  • 将表单序列化并使用 Ajax 发布到特定操作,然后仅返回重述部分(作为局部 View )。 Controller 上的 Action 可以重用并从 View 本身调用以返回局部 View

    好的,最后一个是我正在处理的,但有一个问题。只有当表单被 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/

    相关文章:

    asp.net-mvc-3 - 是 Telerik 的 ASP 扩展。 NET MVC 免费吗?

    asp.net-mvc-3 - web.config 中的 httperrors

    javascript - 组合功能+禁用

    asp.net-mvc - jQuery.Validation.Unobtrusive 客户端验证仅在脚本位于 View 页面上时有效

    javascript - 检查 Controller 中的按钮是否被点击

    c# - ASP.NET/MVC 3 状态

    java - 验证不适用于 Play Framework 2 中的嵌套对象

    javascript - 欧芹验证字段总和

    c# - 仅某些页面需要 JavaScript 和 jQuery

    asp.net-mvc - 为什么 ViewContext.DisplayMode.DisplayModeId 为空?