首先一些背景的:處理與ModelBinder的無效值在ASP.NET MVC 1.0
我有一個表格,在這裏我回來後的一些對象由MVCS自動物化爲對象的內置模型綁定器:
<input type="hidden" name="myobj[0].Id" />
<input type="text" name="myobj[0].Hours" />
<input type="hidden" name="myobj[1].Id" />
<input type="text" name="myobj[1].Hours" />
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Save(IList<MyObject> myobj);
另外:我想強調,我們要發佈帖子的DTO(DataTransferObjects),我們進一步的路線圖到實體框架的實體,所以我們寧願不喜歡,除了可能增加對DTO的改變任何東西屬性。
問題
如果用戶輸入爲「小時」的值無效,說「FUBAR」,那麼ModelBinder的自然不會嘗試設置「Hours'屬性。但它默認爲0,因爲它是int而不是字符串。
這對我來說現在造成了一些困難,因爲現在我看不到用戶是否實際輸入了0,或者這是否是由無效輸入引起的。
因爲我正在使用家庭對象 - 實體(實體框架)映射器,我們無法將「小時」屬性的腳印更改爲int?。我知道MVC有一些內置的驗證,但我們寧可不實現,因爲我們知道它已經受到了嚴重的攻擊,並且ASP.NET MVC 2.0中還有一些新的驗證。
解決方案?
我需要能夠指出用戶哪個字段是不正確的,這意味着我需要能夠捕獲一個異常(或可能是一些其他巧妙的解決方案?),在那裏我可以做一些邏輯並向用戶發回新視圖,以澄清他們錯誤地做了什麼。
我目前的想法:編寫一個自定義的ModelBinder。
你有什麼建議?
是的,我不會那樣做;)..但感謝您的輸入 – CodeMonkey 2010-01-27 23:06:40