【问题标题】:MVC2 controller method that can accept unknown number of variables?可以接受未知数量变量的MVC2控制器方法?
【发布时间】:2011-07-03 07:00:53
【问题描述】:

我需要使用以下发布的数据或其变体。基本上,我需要发布表示问题 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 个空值的问题键。可能有更多或更少的键,它们可能有也可能没有值。我可以重新制定客户端发送数据的方式,所以如果最好的解决方案是重新考虑发送数据的方式,我愿意接受。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 所以,ActionResponse SaveAnswers(int attachmentId, FormCollection form) 应该给我一个包含所有键/值对的表单集合,包括我已经直接绑定的 attachmentId,对吧?
    • 我相信这是正确的。虽然这里方法签名中的 id 通常来自 URL/路由。
    • 不知道是否有任何一种方法比另一种更好,但我最终使用了这种方法,因为它非常适合接下来的步骤。当然,活页夹不会自动为我准备东西,但我需要在以下步骤中手动控制。
    【解决方案2】:

    使用数组。默认的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 类型的参数。 modelbinder 应该负责其余的工作。确保您按顺序索引它们,以便它可以创建没有空条目的数组。

    【讨论】:

      猜你喜欢
      • 2014-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-14
      • 1970-01-01
      • 2017-12-20
      • 2014-05-18
      • 1970-01-01
      相关资源
      最近更新 更多