2012-09-05 108 views
0

您好我有两个列的WebGrid:如何通过过滤列表到动作参数ASP.NET MVC

1名
2 - 动作绑定到另一个控制器动作。点击我将 重新指向那个动作,参数应该是一个列表List<Test> 项目。

输出: 请求去控制器,但参数是空的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=>[email protected]).ToList() 
         } 
         )" class="edit-btn"></a>) 
        ) 
       ).ToString() 
      ) 
    } 
</div> 

控制器代码

名单即将空。

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

回答

0

你Url.Action创造比你的控制器期待一个不同的变量:

要么改变从配料你的行动,以testItems:

grid.Column("Action", header: "Action", format: @<a href="@Url.Action("LoadTest", "NewController", 
         new 
         { 
          testItems = Model.Select(t=>[email protected]).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 
    ); 
+0

对不起,我还没有使用过这里的路线。 –