如何将已过滤的列表传递给Action参数ASP.NET MVC

时间:2012-09-05 15:57:11

标签: asp.net asp.net-mvc asp.net-mvc-3 razor

您好我有一个包含两列的WebGrid:

  

1-名称
  2-Action绑定到另一个控制器动作。点击我会   重定向到该操作,参数应该是List<Test>的列表   项目

输出: 请求转到Controller但参数是空的colelction,我错过了任何东西。

查看:

@model IEnumerable<Test>
<div id="testGrid">
    @{
        var grid = new WebGrid(ajaxUpdateContainerId: "testGrid", canSort: true);
        grid.Bind(Model);   
        @MvcHtmlString.Create(
            @grid.GetHtml(
                columns: grid.Columns
                    (
                        grid.Column(Html.DisplayNameFor(model => model.Name).ToHtmlString(),
                        header: Html.DisplayNameFor(model => model.Name).ToHtmlString()),
                        grid.Column("Action", header: "Action", format: @<a href="@Url.Action("LoadTest", "NewController", 
                        new
                        {
                            ingredients = Model.Select(t=>t.Id==@item.Id).ToList()
                        }
                        )" class="edit-btn"></a>)  
                    )
                ).ToString()
             )
    }
</div>

控制器代码

列出空白。

public ActionResult LoadTest(List<Test> testItems)
        {
            //...test code.
        }

1 个答案:

答案 0 :(得分:0)

您的Url.Action正在创建一个与控制器预期不同的变量:

将您的行动从成分更改为testItems:

 grid.Column("Action", header: "Action", format: @<a href="@Url.Action("LoadTest", "NewController", 
                        new
                        {
                            testItems = Model.Select(t=>t.Id==@item.Id).ToList()
                        }

或更改您的控制器以期望一个名为成分的参数:

public ActionResult LoadTest(List<Test> ingredients )
        {
            //...test code.
        }

另外,您是否更新了Global.asax以期望这种类型的路由?此示例假设您将名称testItems保留为参数。

        routes.MapRoute(
         "Test route", // Route name
         "NewController/{action}/{testItems}", // URL with parameters
         new { controller = "NewController", action = "LoadTest" } // Parameter defaults
     );