2011-04-28 85 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