MVC2控制器方法可以接受未知数量的变量吗?

时间:2011-02-24 04:36:56

标签: asp.net-mvc-2 post parameters controller

我需要使用以下发布的数据或其变体。基本上,我需要发布一个可变数量的键值对,它们代表一个问题ID和答案字符串。

如何编写ASP.NET MVC2控制器方法签名以接受未知数量的键值对?

attachmentId=8809&question_712=&question_713=&question_714=&question_715=&question_716=&question_717=&question_719=&question_720=&question_721=&question_722=&question_723=&question_724=&question_725=&question_726=&question_727=&question_731=&question_738=&question_739=&question_741=&question_742=&question_743=&question_744=&question_745=&question_746=&question_747=&question_748=

请注意,在此示例中,有26个带有空值的问题键。可能有更多或更少的密钥,它们可能有也可能没有价值。我可以重新设计客户端发送数据的方式,因此如果最好的解决方案是重新考虑它的发送方式,我会对此持开放态度。

2 个答案:

答案 0 :(得分:2)

这基本上是FormCollection收集的数据。默认情况下,它在自动生成的控制器中使用。即public ActionResult Edit(int id, FormCollection collection)

答案 1 :(得分:1)

使用数组。默认的模型绑定器可以检测数组。

对于html标记名称的

model.questions [0] .key model.questions [1] .value等,然后构建一个遵循这些约定的对象。

public class QuestionUpdateModel{
    public int attachmentID{get;set;}
    public QuestionPair[] Questions{get;set;}
}
public class QuestionPair{
    public int key{get;set;}
    public string value{get;set;}
}

之后,您的控制器应接受QuestionUpdateModel类型的参数。模型绑定器应该处理其余的事情。确保按顺序对它们进行索引,以便它可以创建没有空条目的数组。