2011-04-07 20 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);