我正在使用MVC3为我的Web应用程序构建搜索表单。我的表格基本上分为两部分。 第1部分有3个搜索条件。名字,姓氏和邮政编码,在该部分下面有一个“搜索”按钮,我可以点击它,它应该进行客户端验证,如果任何字段为空,则给我一个错误信息。
同一页面上的第二部分只有一个文本框 - 按“报价编号”搜索。因此,该部分有一个文本框输入报价编号,下面有另一个名为“搜索”的按钮。当我点击此搜索按钮时,它应该只验证报价编号字段不为空。
我有一个viewmodel,它有4个属性(FName,LName,Zip,Quote Number),我在页面上绑定了它。这两个按钮都会回发页面(我知道有一种方法可以识别回发时点击了哪个按钮)。我面临的问题是回发所有内容都回发了,如果我使用datannotations进行RequiredField检查,它会对所有4个字段进行验证,但是我应该检查点击了哪个按钮,并且只根据3个字段的火灾验证或仅限于1个领域。我如何实现此功能?我希望我能清楚地解释这个问题。
由于
答案 0 :(得分:1)
由于这是MVC,不要将它们视为回发,将它们视为提交。当他们按照不同的标准进行搜索时,他们应该是两种不同的形式,提交两种不同的行为。由于它们是单独的操作,因此每个操作都可以拥有自己的ViewModel和验证。然后将它们组合成一个物理页面以呈现给用户,只需使用部分渲染将它们放入同一视图中。
基本上,您呈现给用户的视图将具有以下内容:
@{
Html.RenderAction("SearchByName");
}
<!-- maybe some markup to visually separate them -->
@{
Html.RenderAction("SearchByQuote");
}
还为您提供了额外的好处,即让每个操作都对单个任务负责,并且您不必输入代码来确定单击了哪个按钮等。
以防你想到自己“嘿,因为两者都是搜索,只是参数不同,我不能重载Search
动作吗?” No
答案 1 :(得分:0)
凯文,
更改您的页面,以便您有两种不同的表单,每种表单对应一种搜索类型。当您在一个表单中单击“提交”时,将仅验证该表单的子字段。
然后,正如R0MANARMY建议的那样,有两个单独的动作,每个动作对应一个搜索表单。
counsellorben