C# ASP.NET Core 3.1 MVC应用程序-子目录中的搜索视图
我知道有一个区域特征。但我认为这正是我真正需要的C# ASP.NET Core 3.1 MVC应用程序-子目录中的搜索视图,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我知道有一个区域特征。但我认为这正是我真正需要的 我有一个基于MVC模板的netcoreapp3.1构建 我有一个HomeController(名称空间My.Project.Controllers) 我还有一个设置控制器(名称空间My.Project.Controllers.Admin) 在我的\u Layout.cshtml中,我像这样链接到控制器(生成的链接是https://localhost:5001/admin/settings/如预期 @if(User.IsInRole(“admi
- 我有一个基于MVC模板的
构建netcoreapp3.1
- 我有一个
(名称空间HomeController
)My.Project.Controllers
- 我还有一个
(名称空间设置控制器
)My.Project.Controllers.Admin
- 在我的
中,我像这样链接到控制器(生成的链接是\u Layout.cshtml
如预期https://localhost:5001/admin/settings/
@if(User.IsInRole(“admin”))
{
设置
}
我还将第一个MapControllerRoute
添加到我的启动.Configure
方法中
app.UseEndpoints(端点=>
{
endpoints.MapControllerRoute(
名称:“管理员”,
模式:“admin/{controller=Home}/{action=Index}/{id?}”
);
endpoints.MapRazorPages();
endpoints.MapControllerRoute(
名称:“默认”,
模式:“{controller=Home}/{action=Index}/{id?}”);
endpoints.MapRazorPages();
});
控制器被调用,并且
公共类设置控制器:控制器
{
私有只读设置提供程序设置提供程序;
公共设置控制器(ISettingsProvider设置sProvider)
{
this.settingsProvider=设置sProvider;
}
公共IActionResult索引()
{
var settings=settingsProvider.GetSettings();
返回视图(设置);
}
}
现在我得到以下错误
处理请求时发生未处理的异常。
InvalidOperationException:未找到视图“索引”。已搜索以下位置:/视图/设置/索引.cshtml
/Views/Shared/Index.cshtml
/Pages/Shared/Index.cshtml 正如我已经说过的,我也尝试过使用区域,但这需要我将我的文件放在一个
区域
文件夹中,它有自己的视图
文件夹和viewstart等
我与nancy fx合作过很多次,我习惯了这样一种惯例,即首先在views/Admin/Settings
中搜索My.Project.Modules.Admin.SettingsModule
的视图
如何使用ASP.NET核心MVC实现同样的功能(对于My.Project.Controllers.Admin.SettingsController
在views/Admin/Settings
中搜索视图)
你试过这个吗
@using (Html.BeginForm("Index", "Settings", "Admin" FormMethod.Get))
{
@if (User.IsInRole("admin"))
{
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle text-dark" href="#" id="navbarDropdown" role="button"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Admin
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" asp-area="" asp-controller="settings" asp-action="Index">Settings</a>
</div>
</li>
@使用(Html.BeginForm(“Index”、“Settings”、“Admin”FormMethod.Get))
{
@if(User.IsInRole(“admin”))
{
设置
}
}你试过这个吗
@using (Html.BeginForm("Index", "Settings", "Admin" FormMethod.Get))
{
@if (User.IsInRole("admin"))
{
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle text-dark" href="#" id="navbarDropdown" role="button"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Admin
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" asp-area="" asp-controller="settings" asp-action="Index">Settings</a>
</div>
</li>
@使用(Html.BeginForm(“Index”、“Settings”、“Admin”FormMethod.Get))
{
@if(User.IsInRole(“admin”))
{
设置
}
}我认为您的问题在于路由的创建 有更多关于这方面的信息 对于您当前的配置,我认为,如果您改变您的模式,它将解决您的问题
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
我相信您的问题在于路由的创建 有更多关于这方面的信息 对于您当前的配置,我认为,如果您改变您的模式,它将解决您的问题
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
解决了的
我必须做四件事
首先,我必须在Startup.Configure中设置一个新的控制器路由
public void配置(IApplicationBuilder应用程序,IWebHostEnvironment环境)
{
app.UseEndpoints(端点=>
{
endpoints.MapControllerRoute(
名称:“区域”,
模式:“{area:exists}/{controller=Home}/{action=Index}”);
endpoints.MapControllerRoute(
名称:“默认”,
模式:“{controller=Home}/{action=Index}/{id?}”);
endpoints.MapRazorPages();
});
其次,我需要告诉我的控制器它属于管理区
[区域(“管理”)]
公共类设置控制器:控制器
{
}
在我的布局中,我必须将asp区域
属性设置为admin
设置
但这还不够,因为默认设置只会在以下位置进行搜索:
InvalidOperationException: The view 'Index' was not found. The following locations were searched:
/Areas/admin/Views/Settings/Index.cshtml
/Areas/admin/Views/Shared/Index.cshtml
/Views/Shared/Index.cshtml
/Pages/Shared/Index.cshtml
因此,我不得不将其添加到ConfigureServices
方法中
services.Configure<RazorViewEngineOptions>(options =>
{
// {0} - Action Name
// {1} - Controller Name
// {2} - Area Name
options.AreaViewLocationFormats.Add("/Views/{2}/{1}/{0}.cshtml");
});
services.Configure(选项=>
{
//{0}-操作名称
//{1}-控制器名称
//{2}-区域名称
添加(“/Views/{2}/{1}/{0}.cshtml”);
});
已解决
我必须做四件事
首先,我必须在Startup.Configure中设置一个新的控制器路由
public void配置(IApplicationBuilder应用程序,IWebHostEnvironment环境)
{
app.UseEndpoints(端点=>
{
endpoints.MapControllerRoute(
名称:“区域”,
模式:“{area:exists}/{controller=Home}/{action=Index}”);
endpoints.MapControllerRoute(
名称:“默认”,
模式:“{controller=Home}/{action=Index}/{id?}”);
endpoints.MapRazorPages();
});
其次,我需要告诉我的控制器它属于管理区
[区域(“管理”)]
公共类设置控制器:控制器
{
}
在我的布局中,我必须将asp区域
属性设置为admin
设置
但这还不够,因为默认设置只会在以下位置进行搜索:
InvalidOperationException: The view 'Index' was not found. The following locations were searched:
/Areas/admin/Views/Settings/Index.cshtml
/Areas/admin/Views/Shared/Index.cshtml
/Views/Shared/Index.cshtml
/Pages/Shared/Index.cshtml
因此,我不得不将其添加到ConfigureServices
方法中
services.Configure<RazorViewEngineOptions>(options =>
{
// {0} - Action Name
// {1} - Controller Name
// {2} - Area Name
options.AreaViewLocationFormats.Add("/Views/{2}/{1}/{0}.cshtml");
});
services.Configure(选项=>
{
//{0}-操作名称
//{1}-控制器名称
//{2}-区域名称
添加(“/Views/{2}/{1}/{0}.cshtml”);
});