我正在使用ASP.NET MVC CORE.我已经实现了自己的ViewLocationExpander,这样我就可以按照我想要的方式构建项目,并将我的视图放在我喜欢的位置.
这是通过实现一个继承的类来实现的,IViewLocationExpander并且大多数工作都在以下方法中进行:
ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
Run Code Online (Sandbox Code Playgroud)
一切都工作得很好,但界面定义了第二种方法,我不知道如何正确实现:
PopulateValues(ViewLocationExpanderContext context)
Run Code Online (Sandbox Code Playgroud)
我已经在互联网上阅读了关于这个界面的文章,但没有人真正提供过关于这个方法究竟是什么的更多信息,而不是说有关它如何帮助缓存的模糊事物.
如果有人可以解释框架如何使用这种方法以及如何适当地使用它来帮助缓存(如果它确实是它的用途),我真的很感激.
我在 ASP.NET MVC Core 2 应用程序中配置默认主页时遇到了一些困难。我似乎无法让路由映射到正确的主页,默认情况下不使用参数,例如。https://localhost:44362
我真的不喜欢将控制器放在 Controllers 文件夹中、在视图中查看和在模型中查看模型的默认约定。我更喜欢按功能分组。
所以我有一个这样的结构:
Features
Home
HomeController.cs
HomeIndex.cshtml
HomeViewModel.cs
Other
OtherController.cs
OtherIndex.cshtml
OtherViewModel.cs
Run Code Online (Sandbox Code Playgroud)
一切正常,除了当没有提供路径时,我似乎无法将默认页面设为 /Home/Index。当 HomeController 在 Controllers 中时一切正常(以及在 Views/Home 中的 Index),但是一旦我移动它,事情就坏了。
我使用的是默认的 Startup.cs 文件,所以我有一个如下所示的 Configure 方法:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseAuthentication();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
Run Code Online (Sandbox Code Playgroud)
我做了一些搜索,看起来在 ConfigureServices 方法中使用它应该可以工作:
services.AddMvc().AddRazorPagesOptions(options =>
{
options.Conventions.AddPageRoute("", "/Home/Index");
});
Run Code Online (Sandbox Code Playgroud)
这会抛出一个:值不能为空或为空 (pageName) 异常。我也试过“/”、“/Home/Index”作为参数。最后,为了更好的衡量,我还交换了上述参数,以防万一我误解了每个参数的用法。
在每种情况下,都不显示页面。如果我输入完整的 URL /Home/Index,它就可以工作。我还尝试将 [Route("Home")] …
我正在尝试更改默认视图位置,以便以下工作:
[Route("")]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
我想要视图的位置是 /MVC/Views/ControllerName/Index(MethodName)
我尝试将以下内容添加到 Startup => ConfigureServices (IServiceCollection)
services.Configure<RazorViewEngineOptions>(o =>
{
o.AreaViewLocationFormats.Clear();
o.AreaViewLocationFormats.Add("/MVC/Views/{1}/{0}" + RazorViewEngine.ViewExtension);
});
Run Code Online (Sandbox Code Playgroud)
以下工作,但我希望它默认为正确的路径
return View("/MVC/Views/Home/Index.cshtml");
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个演示页面,但无法解决下一个问题,因此我尝试了在网上找到的所有内容。我有一个带有标签助手的锚标签:
<a class="menu-link" asp-area="" asp-controller="Telefon" asp-action="Index">Telefonok</a>
Run Code Online (Sandbox Code Playgroud)
我还添加了_ViewImports.cshtml,并在其中 添加了@net @addTagHelper“ *,Microsoft.AspNet.Mvc.TagHelpers”,但仍然出现错误:名称'addTagHelper'在当前不存在语境
我怎么了?!