【问题标题】:ASP.NET MVC3 Client side validationASP.NET MVC3 客户端验证
【发布时间】:2011-04-28 02:27:59
【问题描述】:

我正在使用 MVC3 为我的 Web 应用程序构建一个搜索表单。我的表格基本上分为两部分。 第 1 部分有 3 个搜索条件。名字,姓氏和邮政编码,在该部分下方有一个“搜索”按钮,我可以单击它,它应该进行客户端验证,如果任何字段为空,则会给我一条错误消息。

同一页面上的第二部分只有一个文本框 - 按“报价单号”搜索。因此,该部分有一个文本框来输入报价单,下方还有另一个名为“搜索”的按钮。当我单击此搜索按钮时,它应该只验证报价编号字段是否为空。

我有一个视图模型,它具有所有 4 个属性(FName、LName、Zip、报价编号),我将其绑定在页面上。这两个按钮都会回发页面(我知道有一种方法可以识别在回发时点击了哪个按钮)。我面临的问题是在回发时,所有内容都在回发,如果我使用数据注释进行RequiredField检查,它会对所有4个字段进行验证,但我应该检查单击了哪个按钮,并基于仅对任一3个字段进行验证或仅在 1 个字段上。如何实现此功能?我希望我清楚地解释了这个问题。

谢谢

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 validation


    【解决方案1】:

    由于这是 MVC,不要将这些视为回发,将它们视为提交。由于他们正在按不同的标准进行搜索,因此它们实际上应该是提交两种不同操作的两种不同形式。由于它们是单独的操作,因此每个操作都可以拥有自己的视图以及自己的 ViewModel 和验证。然后将它们组合成一个物理页面呈现给用户,只需使用部分渲染将它们放在同一个视图中。

    基本上你呈现给用户的视图会是这样的:

    @{
        Html.RenderAction("SearchByName");
    }
    <!-- maybe some markup to visually separate them -->
    @{
        Html.RenderAction("SearchByQuote");
    }
    

    还为您提供了额外的好处,即让每个操作负责单个任务,并且您不必输入代码来确定单击了哪个按钮等。


    以防万一你自己想“嘿,既然两者都是搜索,只是参数数量不同,我不能重载Search 操作吗?” No.

    【讨论】:

      【解决方案2】:

      凯文,

      更改您的页面,以便您拥有两种不同的表单,一种用于每种搜索类型。当您在一个表单中单击提交时,只会验证该表单的子字段。

      然后,正如 R0MANARMY 建议的那样,有两个单独的操作,一个用于每个搜索表单。

      辅导员

      【讨论】:

      • 这可能最好作为评论,除非您想添加替代实现或其他东西。
      • @R0MAN,您说得对,将其作为评论会更好,但是当我发布此内容时,我没有评论权限。现在我这样做了,以后任何这样的帖子都将是cmets。新手道歉!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      相关资源
      最近更新 更多