如何在同一项目中同时使用MVC和Razor页面?

7
我有一个基于 Razor 页面的 ASP.NET Core 应用程序,想要利用 MVC 功能。因此,我在应用程序中添加了 Controllers 文件夹和 Views 视图,并在启动文件中添加了 services.AddMvc() 以及另一个端点(endpoint)。然后我试图运行它并测试是否可以返回简单视图,我在默认地址后面添加控制器名称和操作名称,但是它显示"This localhost page can’t be found"。请问如何配置我的应用程序?

我假设你正在使用Visual Studio,当你创建一个新项目时,你可以选择MVC作为项目类型,VS会为你做很多事情,比如创建一个带有相应视图的HomeController!请看这张图片,我正在创建一个新项目并选择MVC。https://imgur.com/a/65S7J3x - classicSchmosby98
是的,你说得对。我现在正在测试它。 - fahime abouhamze
通过.AddRazorPages() .AddControllersWithViews()访问https://learn.microsoft.com/en-us/aspnet/core/fundamentals/startup?view=aspnetcore-6.0。 - Jeremy Lakeman
1个回答

8
如果您想将MVC添加到Razor Page项目中:
1.您需要在“ConfigureServices”中添加“services.AddControllers();”并且在startup.cs中配置MVC路由。
public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();
    services.AddControllers();
    ...
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    ...
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

2. 你需要添加一个名为Controllers的文件夹和一个名为Views的文件夹。

然后将包含_Layout.cshtml_ValidationScriptsPartial.cshtmlPages/Shared文件夹复制到Views文件夹中。

Pages/_ViewImports.cshtml复制到Views/_ViewImports.cshtml,将Pages/_ViewStarts.cshtml复制到Views/_ViewStarts.cshtml

以下是项目结构:

enter image description here


我还有一个问题,如果你能回答我,我会非常感激。我已经按照你的指南进行了操作,现在我已经拥有了所需的东西,我想开始我的项目,并且希望将索引视图作为第一页打开。但是现在页面文件夹中的Index.csHtml成为了第一位。 - fahime abouhamze
1
你可以尝试在Pages/Index中使用@page "RazorPage/Index",这样Views/Index将优先于Pages/Index。另外,如果你想要进入Pages/Index,你需要使用RazorPage/Index - Yiyi You
好的,我明白了,谢谢。 - fahime abouhamze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接