TemplateController:
这有效:
return PartialView("_Create");
但这不起作用:
return PartialView();
asp.net mvc约定实际应该检查一个View文件夹,其名称为controller => “模板”并检查查看与action =>相同的名称“创建”。
这对返回View()有效。为什么返回PartialView()不仅仅考虑下划线?
答案 0 :(得分:5)
这个答案专门针对ASP.NET MVC5。可能需要稍加修改才能与其他版本的MVC一起使用,但通常应该适用。
要让return Partial(model)
尊重部分名称的下划线,您需要一个自定义视图引擎。幸运的是,这是一个非常简单的自定义视图引擎。
public class CustomRazorViewEngine : RazorViewEngine
{
public CustomRazorViewEngine()
{
var underScored = new[] { "~/Views/{1}/_{0}.cshtml", "~/Views/{1}/_{0}.vbhtml" }
PartialViewLocationFormats = underScored.Union(PartialViewLocationFormats).ToArray();
}
}
以下格式是共享视图的默认模式:
~/Views/Shared/{0}.cshtml
~/Views/Shared/{0}.vbhtml
如果您愿意,也可以包含替代品。如果您特别想要仅使用下划线提供文件,请删除联合并仅使用:PartialViewLocationFormats = underScored;
这是剃刀视图引擎,我认为如果它是您选择的引擎,它将与webforms视图引擎相媲美。
最后,您需要将此注册为视图引擎:
public class Startup
{
public void Configuration(IAppBuilder app)
{
//View Engines
ViewEngines.Engines.Remove(ViewEngines.Engines.Single(x => x is RazorViewEngine));
ViewEngines.Engines.Add(new CustomRazorViewEngine());
Startup
类特定于MVC5,这在版本之间会略有不同。您可以将App_Start文件与webactivator一起使用,也可以将global.asax用于其他版本。
答案 1 :(得分:3)
部分视图应该以下划线开头,这只是一种命名约定。 但奇怪的是/ mvc引擎不会用下划线搜索部分视图。
return PartialView("_Create")
或答案 2 :(得分:0)
在网上阅读完之后,对于为什么_应该在那里/它应该在那里的意见非常分歧。
我认为这不是asp.net mvc命名约定,并且证明框架本身并不遵守这一点。 (正如你在问题中指出的那样)
_的起源来自webmatrix / asp.net,其中_用于不能直接为用户提供服务的资源。
唯一可以可以作为前缀的视图是可重复使用的组件,例如_layout,也许是_nav或_datepicker
Razor无论如何都删除了局部视图的概念(因为没有类似于 .aspx 和 .ascx之间的差异,在剃刀中&#39 ;无论如何都是 .cshtml 。