我有一个列出一堆类别的视图:
<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传递给我的索引控制器?
答案 0 :(得分:9)
你的控制器操作会很高兴接受可以为空的int
,所以给它一个可以为空的int
就好了!
@Html.ActionLink("Alle", "Index", "Products", new { id = (int?)null })