ASP.NET MVC Core如何在可枚举视图页面中显示路由值?

问题描述

我的索引控制器中有一条简单的路由... [controller] / {region}。

因此在url中您将看到.. http:// localhost:51588 / Movies / malta (其中“马耳他”是该区域)

在随后的index.cshtml视图的代码中,该视图列出了我拥有的“马耳他”视图的电影。

@model IEnumerable<MaltaMoviesMVCcore.Models.Movie>

@{
    ViewData["Title"] = "Movies";
}

Q ...我想将“区域”动态添加到上面的“标题”中,因此显示为“位置-马耳他” 我尝试过。...ViewData [“ Title”] =“电影-” @ Model.Region; 但是出现错误“ IEnumerable不包含'区域'的定义.....”

这在典型的“详细信息视图”中可以正常工作,在该视图中,模型只是....

@model MaltaMoviesMVCcore.Models.Movie and not ienumerable.

解决方法

创建一个MovieModelClass:

public class MovieModel
{
public string Region {get; set;}
public IEnumerable<MaltaMoviesMVCcore.Models.Movie> Movies {get; set;}
}

并将其初始化到您的控制器中

在视图内部更改模型:

@model MovieModel

在此之后您可以使用

ViewData["Title"] ="Movies - " @Model.Region

您可以使用:

访问电影列表
@Model.Movies

//for example
foreach(var movie in @Model.Movies)
{
}
,

感谢谢尔盖(Sergey)的帮助。

那不是很有效。

最后,我从“ Context.Request.Path.Value”(“ MOVIES / MALTA”)获得了区域名称(“ MALTA”)。 最初,我尝试使用Context.Request.Query [“ RegionName”],但这返回null 我知道首选的方法是从模型中获取它。

最终代码...

// Get the last part of Request. Path '/MOVIES/MALTA'
        string path = Context.Request.Path.Value.ToString();
        string regionname = path.Substring(path.LastIndexOf("/") + 1);