将FormCollection转换为仅在运行时已知的类型的对象

时间:2015-04-15 12:44:06

标签: c# asp.net-mvc formcollection

我的控制器包含包含代码的操作,看起来像

public ActionResult Index(FormCollection data)
{
    var type = findTypeByName(data["CastToTypeName"]);
    var model = transformRequestDataToType(data/* or may be Request*/, type) as DbEntity;
    SaveData(model);
    ...
}

有没有办法将请求数据转换为运行时已知类型的对象? 我使用<form>将数据发布到控制器并尝试在不将表单数据更改为json的情况下找到解决方案。

1 个答案:

答案 0 :(得分:0)

首先,我将输入名称表示法简化为:

a.name
a.items\
a.items/name
a.items/desc
a.items\
a.items/name
a.items/desc

a.name
a.items.Index
a.items[0].name
a.items[0].desc
a.items.Index
a.items[1].name
a.items[1].desc

接下来我在使用js提交之前提取表单数据,阻止表单提交并将带有表单数据的ajax post请求发送到action表单属性中定义的url。在服务器端,我解析数据并递归地将其分配给给定类型的实例的属性。我设置ParseAs<MyType>(Request)时可以ParseAsGiven(Request)甚至CastToTypeName