我使用ASP .NET核心,但是有问题。
我有3个页面,可以在一个控制器中创建一个页面,但是对于此页面,我必须只有一个控制器,在此控制器中,我必须具有一个可以创建单独URL的功能。 ( 3页)。
例如:
* http://mydomain/page/ *主页,负载,博客;
为此,我需要导航,但是我将拥有相同的 HTML文件,只会更改模型中的数据。
因此,我将有3个导航按钮,用于导航用户同一页面,但是我将从模型以及控制器收到的其他内容只是更改页面URL。
我该怎么做?
答案 0 :(得分:2)
您不想重复HTML吗?使用一个视图。然后您可以拥有一个如以下代码段的控制器:
class PagesController : Controller
{
[HttpGet("about")]
public IActionResult About() => View("MyCommonView", yourModel); // get the model from wherever you plan to
[HttpGet("contact")]
public IActionResult Contact() => View("MyCommonView", yourModel);
[HttpGet("whateverelse")]
public IActionResult WhateverElse() => View("MyCommonView", yourModel);
}
可能只有一个动作,但是我不会这么做。取而代之的是,每个动作都具有单独的视图,并放置三个动作布局文件所共有的标记。这将使不同的操作更具灵活性。
答案 1 :(得分:1)
一种方法是使用Route
属性装饰您的动作:
[Route("page")]
public class PagesController : Controller
{
// you may also use [HttpGet("{pageName}", Name = "PagePath")] instead,
// to explicitly match HTTP GET requests
[Route("{pageName}", Name = "PagePath")]
public IActionResult GetPage(string pageName)
{
switch(pageName?.ToLower())
{
case "home":
return View("Page", homeModel);
case "home":
return View("Load", loadModel);
case "home":
return View("Blog", blogModel);
default:
return NotFound();
}
}
}
现在,您可以在Views/Pages/Page.cshtml
上创建视图并生成与助手的链接:
@Url.RouteUrl("PagePath", new { pageName = "Home" }) <!-- will produce "/page/Home" string -->