2010-01-25 46 views
1

首先一些背景的:處理與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。

你有什麼建議?

回答

0

這對我來說現在造成了一些困難,因爲現在我看不到用戶是否實際輸入了0,或者如果這是由無效輸入引起的。

是的,你可以。查看ModelState。

0

雖然這不是特別理想,但您已經聲明您不想改變其他任何東西。所以你提到的選項,創建一個自定義的ModelBinder將工作正常。但是,您可能會發現自己要爲要綁定的每個實體創建一個ModelBinder。

+0

是的,我不會那樣做;)..但感謝您的輸入 – CodeMonkey 2010-01-27 23:06:40