使用ActionLink将null参数传递给控制器

时间:2013-01-31 23:14:29

标签: razor parameters asp.net-mvc-4 controller actionlink

我有一个列出一堆类别的视图:

<ul>
    <li>@Html.ActionLink("All", "Index", "Products")</li>
    @foreach (var item in Model.ProductCategories)
    {
        <li>@Html.ActionLink(item.Name, "Index", new { id = item.Id }, null)</li>
    }
</ul>

如图所示,我应该得到一个类别链接列表,最上面一个是“全部”,下面的是相应的类别名称,ID传递给控制器​​。

我的控制器看起来像这样:

public ActionResult Index(int? id)
{
    var categories = _productCategoryRepository.GetAll().OrderByDescending(f => f.Name);
    var items = id == null
        ? _productItemRepository.GetAll().OrderBy(f => f.Name).ToList()
        : _productCategoryRepository.GetSingle((int)id).ProductItems.OrderBy(f => f.Name).ToList();

    var model = new ProductsViewModel()
                    {
                        ProductCategories = categories,
                        ProductItems = items
                    };

    return View(model);
}

所以类别应该始终相同。但是,当 ID null 时,项目应显示每个项目;当设置 id 时,项目应显示特定类别的项目。

这一切都非常好,所以当我点击类别链接时。我这样得到了网址:

/产品/索引/ 3

大!现在我点击“全部”链接,但它将我转到 / Products / Index / 3 ,即使我显然没有传递参数。我尝试传递一个空值:

@Html.ActionLink("Alle", "Index", "Products", new { id = null })

但是我得到了错误:无法将'null'分配给匿名类型属性。

如何强制将null传递给我的索引控制器?

1 个答案:

答案 0 :(得分:9)

你的控制器操作会很高兴接受可以为空的int,所以给它一个可以为空的int就好了!

@Html.ActionLink("Alle", "Index", "Products", new { id = (int?)null })