【问题标题】:Passing a list of object from a view to the controller in asp.net mvc?将对象列表从视图传递到asp.net mvc中的控制器?
【发布时间】:2010-03-26 12:15:49
【问题描述】:

这可能吗?
我想要做的是将对象列表作为参数传递给 actionlink
目前,当我尝试执行此操作时,列表在到达控制器时始终为空!

在视图中

 <%= Url.Action("ActionName", new { list = Model.ListOfObjects}) %>

在控制器中

public ActionResult ActionName(List<Object> list)
    {
        //Do stuff
    }

【问题讨论】:

  • /Controller/Object?list=System.Collections.Generic.List%601%5BObject%5D
  • 抱歉应该是 /Controller/ActionName?list=System.Collections.Generic.List%601%5BObject%5D

标签: asp.net asp.net-mvc


【解决方案1】:

就它是否可能而言 - 有可能,但不是您尝试的方式。请记住,这将转换为将由 MVC 解析的 URL,并且不同的参数将作为直接参数或通过模型绑定器传递给操作。

我建议您尝试弄清楚 URL 的外观,然后可能执行一些自定义代码来生成 URL(可能使用自定义帮助函数/扩展方法)。如果您将它与自定义模型绑定器结合使用,您应该有一个非常优雅的解决方案,它可以完全满足您的需求。

例如,如果您的列表有 3 个字符串类型的对象,您可以编写一个帮助程序来生成这样的 url(假设列表包含“第一”、“第二”和“第三”)

/Controller/Action?obj1=first&obj2=second&obj3=third

现在您只需要编写一个模型绑定器来查找名为“obj1”、“obj2”等的条目,然后将结果简单地添加到列表中。

【讨论】:

    【解决方案2】:

    虽然它可能会获取对象列表,但它可能不会呈现您期望看到的内容;它实际上可能会吸入列表类(或该列表所代表的任何类)的值并将其用作参数。

    不是通过获取请求,除非您手动写出参数并反序列化参数。或者,相反,使用表单中的这些值回发到服务器;那么,这将正确填充。

    HTH。

    【讨论】:

      【解决方案3】:

      这样的事情会起作用,如果你在很多地方都需要它,我建议制作一个助手来包含这个逻辑。

      <% var values = new RouteValueDictionary();
         for (int i = 0; i < Model.ListOfObjects.Count -1; i++)
         {
            values.Add("list["+i+"]", Model.ListOfObjects[i]);
         }%>
      <%= Url.Action("ActionName", values); %>
      

      动作将知道如何处理控制器中的列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-28
        • 2011-10-15
        相关资源
        最近更新 更多