C# 如何使用.net内核在一个控制器中创建几个url

C# 如何使用.net内核在一个控制器中创建几个url,c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,我使用ASP.NETCore,我遇到了一些问题 我有3个页面可以在一个控制器中创建,但是对于这个页面,我必须只有一个控制器,在这个控制器中,我必须有一个功能,可以为这个3个页面创建单独的URL 例如: **主页、加载、博客 为此,我需要导航,但我将拥有相同的HTML文件,只会更改模型中的数据 因此,我将有3个导航按钮,它将为用户导航同一页面,但我将从模型和控制器接收另一个内容,我只需要更改页面URL 我如何才能做到这一点?您不想重复HTML吗?使用一个视图。然后你可以有一个像这样的控制器: 类页

我使用ASP.NETCore,我遇到了一些问题

我有3个页面可以在一个控制器中创建,但是对于这个页面,我必须只有一个控制器,在这个控制器中,我必须有一个功能,可以为这个3个页面创建单独的URL

例如:

**主页、加载、博客

为此,我需要导航,但我将拥有相同的HTML文件,只会更改模型中的数据

因此,我将有3个导航按钮,它将为用户导航同一页面,但我将从模型和控制器接收另一个内容,我只需要更改页面URL


我如何才能做到这一点?

您不想重复HTML吗?使用一个视图。然后你可以有一个像这样的控制器:

类页面控制器:控制器
{
[HttpGet(“关于”)]
public IActionResult About()=>View(“MyCommonView”,yourModel);//从您计划去的任何地方获取模型
[HttpGet(“联系人”)]
public IActionResult Contact()=>视图(“MyCommonView”,您的模型);
[HttpGet(“whateverelse”)]
public IActionResult WhateverElse()=>视图(“MyCommonView”,您的模型);
}

可能只有一个动作,但我不会这么做。相反,我希望每个动作都有单独的视图,并放置三个动作布局文件中常见的标记。这将为不同的操作提供更大的灵活性。

其中一种方法是使用
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();
        }
    }
}
现在,您可以在
视图/Pages/Page.cshtml
中创建视图,并生成与帮助程序的链接:

@Url.RouteUrl("PagePath", new { pageName = "Home" }) <!-- will produce "/page/Home" string -->
@Url.RouteUrl(“PagePath”,新的{pageName=“Home”})

事实上,通常情况下,这不是解决问题的方法。您应该为不同的页面创建不同的控制器(一般来说)。每个名为“PageNameController”的控制器内部都有一个索引操作,用于返回视图。有没有一个具体的原因让你需要把它们都放在一个控制器中?@Jabberwocky为此,我不需要创建单独的控制器和索引页,因为我会复制过去的代码,我在3页上有相同的视图“对于这些页面,我必须只有一个控制器”…为什么?这似乎是一个完全武断的要求,违背了MVC的一般原则。“我在3页上有相同的观点”…我不认为这对您使用控制器有任何影响。@qunz666您违背了MVC的含义。如果您具有相同的视图和相同的内容,则从相应的控制器返回包含所需模型的视图。MVC是关于分离关注点的,而你正计划做相反的事情。@qunz666是的。你必须学习MVC的基础知识。命名约定使.NET知道如何将控制器映射到视图。你的模型将成为你的内容。如果您告诉视图,视图将从控制器继承它。