Asp.net mvc - 在模型绑定之前更改密钥

时间:2011-04-07 12:14:24

标签: asp.net-mvc modelbinders

我必须在绑定发生之前更改密钥(controllerContext.HttpContext.Request.Form)。

这甚至可能吗?我重写了DefaultModelBinder的BindModel方法并尝试了controllerContext.HttpContext.Request.Form.Add()但它只是readonly。

我无法更改提交的html中的表单键。

例如

key:xxx_xxx_rownumber_cell

新密钥:模型[1] .Prop1

模型上也有一些数据转换,因此不应忽略验证。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

为什么不让你的action方法将FormCollection作为参数,然后手动绑定你需要它绑定?

另外,您也可以为特定类型创建自定义模型绑定器以利用此转换。我相信。

HTH。