【问题标题】:How to pass a filtered list into Action parameters ASP.NET MVC如何将过滤后的列表传递到操作参数 ASP.NET MVC
【发布时间】:2012-09-05 15:57:11
【问题描述】:

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

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

输出: 请求转到控制器,但参数为空集合,我是否缺少任何东西。

查看:

@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.
        }

【问题讨论】:

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


    【解决方案1】:

    您的 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
         );
    

    【讨论】:

    • 对不起,我没有使用这里的路线。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 2021-02-14
    • 2011-07-25
    • 1970-01-01
    相关资源
    最近更新 更多