我確信這已被回答之前,但我花了最後三個小時尋找一個可接受的解決方案,一直無法找到任何東西,所以我道歉我的東西肯定是重複。模型綁定與父母/子女關係
我有兩個域對象,播放器和位置。球員有一個位置。我的域對象是使用NHibernate綁定到我的數據庫的POCO。我有一個需要播放器的添加動作,所以我正在使用內置的模型綁定。在我看來,我有一個下拉列表,讓用戶選擇球員的位置。下拉列表的值是該位置的標識。除了我的Position對象未通過驗證(ModelState.IsValid)之外,所有東西都可以正確填充,因爲在模型綁定時它只有一個Id,並且沒有其他所需的屬性。
ASP.NET MVC 2解決此問題的首選解決方案是什麼?
解決方案我已經試過......
- 取從ModelState.IsValid之前基於ID數據庫中的位置被稱爲在我的控制器的添加操作。我無法讓模型再次運行驗證,所以ModelState.IsValid總是返回false。
- 創建一個自定義的ModelBinder,該對象繼承自默認聯編程序並在調用基聯聯編程後從數據庫中獲取Position。 ModelBinder似乎在進行驗證,所以如果我使用默認綁定器中的任何東西,我都會被解決。這意味着我必須完全推出我自己的綁定器,並從表單中獲取每個值......對於這種常見用例,這看起來確實是錯誤和低效的。
解決方案,我認爲可能的工作,我只是想不出該怎麼辦......
-
播放器使用時
- 關閉驗證的位置級別。
- 編寫一個自定義ModelBinder利用大多數屬性綁定的默認綁定,但讓我從數據庫中獲取位置,之後默認綁定運行驗證。
那麼,你們其他人怎麼解決這個問題呢?
感謝,
丹
附:在我看來,在這種情況下在Player上有PositionId並不是一個好的解決方案。必須以更優雅的方式解決。
所以,基本上我必須爲我所有的觀點製作DTO。對我來說似乎相當低效。其他人是否有解決方案? – DFX 2010-03-28 02:32:33
我起初聽到這個想法的時候有同樣的想法。但測試和關注點分離的積極方面似乎總是勝利。對於我來說,創建另一個模型通常比調試特定於域或創建自定義模型綁定器更快。 – 2011-08-06 17:02:29