2012-04-02 22 views
3

我對模型驗證有一個小問題。使用自動填充字段進行MVC驗證

我有一個名爲「theID」的隱藏字段和一個名爲「theDesc」的文本框。該字段theDesc是一個自動完成,當我選擇它時,ID獲取存儲的ID。

theID是存儲在數據庫中的字段,並且是一個那就是「該電源線」,所以我用:@ Html.ValidationMessage(「theID」)

的問題是,CSS類輸入 - 驗證錯誤被分配給隱藏字段。我現在這種行爲是正常的和預期的,但有一種方法可以改變這種情況?

我想完成的是theDesc字段顯示輸入錯誤類。這樣用戶可以注意到缺少。

這不是什麼大不了的事情,但是我的強迫症使我瘋狂地想要以同樣的風格得到所有的錯誤。

+0

我希望的「開箱即用」的解決方案,而不是一個自定義JavaScript或類似解。我有很多形式。 – epaulk 2012-04-02 14:53:22

+0

如果ID是隱藏字段總是那麼你可以考慮刪除所需的屬性 – swapneel 2012-04-02 14:58:48

+0

我編輯的帖子,使其更清晰。 – epaulk 2012-04-02 15:26:56

回答

0

在您的自動完成的更改事件將該值分配給您的隱藏字段。

2

好問題和很好的措辭!我有完全相同的問題,但還沒有確定的答案。我設法做到了 - 至少在服務器端驗證 - 通過在控制器中添加服務器端驗證,並在視圖中使用HTML助手而不是自定義HTML。這篇文章讓我:

.input-validation-error to a textbox when the form is redisplayed for failed value

由於帖子中提到,有必要設定的HTML例如名稱模型字段正確。所以我在控制器中添加了一些服務器端驗證代碼。注意檢查現場model.theID是如何從ModelState中「TheDesc補充說:」名字不同:

控制器代碼:

public ActionResult SomeActionIndex(SomeModel model) { 
    ... 
    if (string.IsNullOrEmpty(model.theID) { 
     ModelState.AddModelError("theDesc", "The field is uhm... required!"); 
    } 
    ... 
} 

在文章的評論表明,對於通過CSS高亮(紅色邊框類),它有助於使用標準的HTML幫助器,因爲它們自動啓用了jQuery驗證。 在我的情況下,經過驗證的自動完成列表最初不是使用HTML助手生成的,而是使用嵌套視圖內的一些自定義HTML生成的。我改變了這一點。

查看代碼:

@Html.TextBoxFor(m => Model.theDesc, new { @class="auto-complete", 
@placeholder="choose a value..." }) 

@Html.TextBoxFor(m => Model.theID, new { @style = "display: none" }) 

注:恰恰是在HTML傭工做那種魔法,使這項工作我一直沒能尚未搞清楚。所以我會離開它,直到後來,還是爲別人,但我認爲這個問題涉及到它:

custom htmlhelper with validation support