如何基于控制器模板和动作模板生成带有属性路由的URL



我在IdeasController中有以下URL模板:

[Controller]
[Route("/gemeente/{municipalityName}/election/{electionId}/ideas/"Name = "Ideas")]
public class IdeasController : Controller

我也有这个Action与路由模板:

[Route("theme/{themeId}/",Name = "GetTheme")]
public IActionResult GetTheme(int themeId)
{
Console.WriteLine("Get theme----------------------------");

IEnumerable<Idea> ideas = _ideasManager.GetIdeasByTheme(themeId);
GeneralTheme theme = _themeManager.GetGeneralTheme(themeId);
IdeasByThemeDto ideasByThemeDto = new IdeasByThemeDto
{
Ideas = ideas,
Theme = theme
};
ViewBag["Title"] = "Ideas by theme: " + theme.Name;

return View("IdeasByTheme", ideasByThemeDto);
}

如何生成URL到达视图中的gemeente/Dendermonde/election/1/ideas/theme/2?

具体例子:

我有一个想法的集合,每个想法都有一个主题与themeId

我想生成一个URL,附加当前URL (/gemeente/{municipalityName}/election/{electionId}/ideas/)和主题id (theme/{themeId}),这基本上结合了两个(" idea "one_answers"GetTheme")模板。

在视图中:

@Url.RouteUrl("GetTheme22", new { themeId = Model.Theme.Id })  //empty string

注意:自治市名称和选举id也应该根据之前的请求动态插入。

给定所示的路由模板,您可以使用Url.RouteUrl:

生成链接
<a href="@Url.RouteUrl("GetTheme", new {municipalityName="Dendermonde", electionId=1, themeId=2})">Get Themes</a>

解析为

<a href="gemeente/Dendermonde/election/1/ideas/theme/2">Get Themes</a>
在ASP中路由到控制器动作。. NET Core -通过路由 生成url

MunicipalitNameelectionId如何动态插入

该信息如何传递给视图取决于个人偏好和特定于用例的因素。

这里,下面从ViewBag提取控制器模板参数,假设它是从前面的请求 中存储的。
<a href="@Url.RouteUrl("GetTheme", new {
municipalityName=ViewBag["MunicipalitName"], 
electionId=ViewBag["electionId"], 
themeId=Model.Theme.Id})">Get Themes</a>

下面的代码假设所有内容都存储在Model

<a href="@Url.RouteUrl("GetTheme", new {
municipalityName=Model.MunicipalitName, 
electionId=Model.ElectionId, 
themeId=Model.Theme.Id})">Get Themes</a>

相关内容

  • 没有找到相关文章

最新更新