2011-04-07 58 views
0

我必須在綁定發生之前更改密鑰(controllerContext.HttpContext.Request.Form)。Asp.net mvc - 在模型綁定之前更改密鑰

這甚至可能嗎?我重寫了DefaultModelBinder的BindModel方法並嘗試了controllerContext.HttpContext.Request.Form.Add(),但它是隻讀的。

我無法更改submited html中的表單鍵。

例如

鍵:xxx_xxx_rownumber_cell

新的密鑰:型號[1] .Prop1

也有在模型上一些dataanotations,所以驗證不應該被遺漏。

+1

你能解釋爲什麼,特別是你如何改變它們? – Lazarus 2011-04-07 12:18:29

+1

你爲什麼要那樣做?如果你想綁定時執行一些自定義邏輯,你就有了正確的地方 - 覆蓋DefaultModelBinder的方法 – archil 2011-04-07 12:20:17

+0

請看我更新的帖子。 – user256034 2011-04-07 12:25:13

回答

0

爲什麼不只是讓您的操作方法以FormCollection爲參數,然後手動綁定,但是您需要綁定?

此外,您還可以爲特定類型創建自定義模型聯編程序,以便我也相信使用此轉換。

HTH。

+0

帶有FormCollection的解決方案將跳過模型驗證,並且在自定義模型綁定中,驗證將被跳過。 – user256034 2011-04-08 07:18:44

1

你可能已經發現了這個另一種解決方案前一段時間,但如果你仍然想這樣做,你應該能夠有這樣的改變形式:

var collection = controllerContext.HttpContext.Request.Form; 
PropertyInfo readOnly = collection.GetType().GetProperty("IsReadOnly", BindingFlags.NonPublic | BindingFlags.Instance); 
readOnly.SetValue(collection, false, null); 
// Your changes here. 
readOnly.SetValue(collection, true, null);