2011-02-24 23 views
1

我需要使用以下发布的数据或其变体。基本上,我需要发布代表问题ID和答案字符串的可变数量的键值对。MVC2控制器方法可以接受未知数量的变量吗?

如何编写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

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

+0

因此,ActionResponse SaveAnswers(int attachmentId,FormCollection窗体)应该给我一个包含所有键/值对(包括我已经直接绑定的attachmentId)的集合,对吗? – alphadogg 2011-02-24 04:48:47

+0

我相信这是正确的。虽然方法签名中的id通常来自URL /路由。 – 2011-02-24 04:53:14

+0

不知道是否有任何方法比其他方法更好,但我最终使用这种方法,因为它适合下一步。当然,活页夹不会自动为我准备东西,但我需要按照以下步骤进行手动控制。 – alphadogg 2011-02-24 13:34:18

1

使用数组。默认的modelbinder可以检测数组。

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

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类型的参数。模型结合者应该照顾其余的人。确保您按顺序编制索引,以便它可以创建没有空条目的数组。

相关问题