在 MVC 4 中根据 url 深度过滤列表项

Filtering list items based on url depth in MVC 4

我正在学习 MVC。经过长时间的尝试但没有成功,我在这里为您提供帮助。

我正在做一个业余爱好项目,频道指南网站,其中列出了频道的语言和类别。

URL: Channel/English, 显示英文频道
URL:Channel/Sports,显示频道属于体育类别。
URL: Channel/English/Sports, 显示属于体育类别的英文频道
URL: Channel/Sports/English, 显示频道属于英语的体育类别

控制器名称:ChannelController
动作方法代码如下

public ActionResult Index(string language = "All", string category = "All")
{
    List<ViewModel.ChannelIndex> list = client.GetList(1, language, category);
    return View(list);
 }

下面是我的 HTML 代码,它为每个频道生成 div

<div class="col-md-6 col-sm-6">
    <a href="@Url.RouteUrl("DefaultLanguageFirst", new { language = channel.LanguageId })">@channel.LanguageName</a>  
    <a href="@Url.RouteUrl("DefaultCategoryFirst", new { category = channel.CategoryId })">@channel.CategoryName</a>
</div>

下面是 RouteConfig 的代码

           routes.MapRoute(
                name: "DefaultLanguageFirst",
                url: "{controller}/{language}/{category}",
                defaults: new { controller = "Channel", action = "Index", language = UrlParameter.Optional, category = UrlParameter.Optional}
            );

            routes.MapRoute(
                name: "DefaultCategoryFirst",
                url: "{controller}/{category}/{language}",
                defaults: new { controller = "Channel", action = "Index", category = UrlParameter.Optional, language = UrlParameter.Optional }
            );

我能感觉到我做错了什么。
顺便说一句,我也试过用 @Html.ActionLink 而不是 @Url.RouteUrl 结果是一样的。

我的问题如下:
1) 如何用单一操作方法处理这些请求。
2) 为什么 @Url.RouteUrl 不根据 mapRoute 名称进行区分,即在 DefaultLanguageFirstDefaultCategoryFirst
之间 3)是否真的可以根据我正在尝试的内容进行过滤。

有人可以帮助我了解我哪里出错了或者我可以参考的任何资源来解决问题。

提前致谢。

这永远不会按照您想要的方式进行路由!您可以选择一条路线:

routes.MapRoute(
    name: "DefaultStuffRoute",
    url: "Channel/{category}/{language}",
    defaults: new { controller = "Channel", action = "Index", language = UrlParameter.Optional}
);

然后只用

  • URL: Channel/Sports,显示频道属于体育类别。
  • URL:Channel/Sports/英文,节目频道属于体育类,语言为英文

用你的方式说

channel/<string>/<string>

对于您的两条路线,如果第一个字符串是类别或语言,asp 将永远无法解决。

更新 当谈到在 MVC 或 WebAPI 中进行过滤时,我会考虑使用查询字符串参数。

  • Url: channels/cnn/ - CNN 频道的所有节目
  • Url: channels/cnn/?lang=en - CNN 频道的所有节目 英语
  • URL: channels/cnn/?cat=sports - CNN 频道的所有节目 与运动相关的
  • URL: channels/cnn/?lang=en&cat=sports - CNN 的所有英文节目和与体育相关的节目