2011-04-28 285 views
1

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

同一页上的第二部分只有一个文本框 - 用“报价编号”进行搜索。所以该部分有一个文本框输入报价编号,并在下面有另一个名为“搜索”的按钮。当我点击这个搜索按钮时,它应该只验证报价编号字段不是空的。

我有一个viewmodel具有所有4个属性(FName,LName,Zip,Quote Number),我绑定在页面上。这两个按钮都会回传页面(我知道有一种方法可以识别回发时单击哪个按钮)。我面临的问题是回发一切都回来了,如果我使用datannotations做RequiredField检查,它会对所有4个字段进行验证,但是我应该检查哪个按钮被点击并且基于那个只有3个字段上的火验证或只在1个领域。我如何实现这一功能?我希望我清楚地解释这个问题。

感谢

回答

1

由于这是MVC,不要以为这些作为回传,把它们看成提交。由于他们通过不同的标准进行搜索,他们应该是两种不同的形式,以两种不同的行动。由于它们是独立的操作,每个操作都可以拥有自己的ViewModel和验证视图。然后将它们组合成一个物理页面,向用户展示只使用局部渲染将它们放入同一视图。

基本上你呈现给用户将有类似的看法:

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

还为您提供具有每一个动作负责单个任务的额外的好处,你不必把代码要弄清楚哪个按钮被点击等


而且万一你觉得自己“嘿嘿,既然都是搜索,只需用不同数量的参数,我不能超载Search行动?” No

+0

+1,打我吧。 – 2011-04-28 02:37:08

0

凯文,

,让你有两种不同的形式,每一个搜索类型

改变你的页面。当您单击一个表单提交时,只有该表单的子字段将被验证。

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

counsellorben

+0

除非你想添加一个备用的实现或其他东西,否则这可能会更好。 – R0MANARMY 2011-04-30 07:47:47

+0

@ R0MAN,你是对的,作为一个评论,这会更好,但是当我发布这个评论时,我没有评论特权。现在,我做了,将来任何类似的帖子都将成为评论。新手道歉! – counsellorben 2011-05-03 17:52:25