是否可以使用多个视图引擎?我有一个已经在使用webforms视图引擎的大型(ish)网站,但我们希望转向引发新功能.
这支持吗?任何在线文档详细说明如何做到这一点?
我有一个类似于以下的Page.cshtml(不起作用):
@{
Layout = "../Shared/Layouts/_Layout.cshtml";
var mycollection = (ViewBag.TheCollection as IQueryable<MyCollectionType>);
}
<h2>@ViewBag.Title</h2>
content here
@if (mycollection != null && mycollection.Count() > 0)
{
@section ContentRight
{
<h2>
Stuff
</h2>
<ul class="stuff">
@foreach (MyCollectionType item in mycollection )
{
<li class="stuff-item">@item.Name</li>
}
</ul>
}
}
Run Code Online (Sandbox Code Playgroud)
正如我所说,这不起作用.如果集合中没有任何内容,我想不定义该部分.有没有办法让这样的工作?如果没有,我的其他选择是什么?我对这款Razor ViewEngine非常陌生.
编辑
在我的布局中我有:
@if(IsSectionDefined("ContentRight"))
{
<div class="right">
RenderSection("ContentRight")
</div>
}
Run Code Online (Sandbox Code Playgroud)
我不想要的是当该部分为空时输出的div.
在方法中的自定义视图引擎中FindView,如何查看Layout使用的?masterName总是空的.
ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache) {
// How do I get WebViewPage.Layout to know what layout is used?
}
Run Code Online (Sandbox Code Playgroud) 我有一个2级菜单项:我有一个部门列表,每个部门都有一个商店列表.
我有一个菜单,PartialView,它遍历Model(部门)并构建菜单:
@model IEnumerable<Department>
<ul>
@foreach (var department in Model)
{
<li>
<a href="#">@Model.DepartmentName</a>
<ul>
@foreach (var store in department.Stores)
{
<li><a href="some-url">@store.StoreName</a></li>
}
</ul>
</li>
}
</ul>
Run Code Online (Sandbox Code Playgroud)
这就是我在我的菜单中调用Menu PartialView的方式_layout.cshtml:
@Html.Partial("Shared/_Menu", MyApplicationCache.departments)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我在所有请求上将相同的模型(从缓存)传递给PartialView.
Razor ViewEngine是否有内部缓存系统来识别此视图是否已为此模型构建(符合HTML字符串)?或者它是否在每个请求上重新渲染(重新编译)PartialView?
我想知道是否对asp.net MVC的"最佳"替代视图引擎有一个普遍的共识.到目前为止,我知道Spark,Brail,NHaml,但其他人呢?
我要做的是使用不同的模板生成电子邮件内容.
我认为ASP.NET MVC可能非常适合这种情况.我的控制器将获取电子邮件的必要数据并决定要呈现的视图(模板).(这只是一个简单的邮件合并,需要有条件块,foreach等)
我希望能够将这些模板存储在数据库中而不是Web应用程序中的文件中,因此可以从Web应用程序本身轻松添加新模板.
这可能吗?我希望能够使用WebForms视图引擎,但如果不可能,则会考虑其他视图引擎.我希望使用键入的视图.
我正在关注Chris Pietschmann 在ASP.NET MVC中使用主题的解决方案.
我注意到的一件事是在后续请求中没有从ViewLocationCache中检索视图名称.我正在使用ASP.NET MVC 2.0 RC
执行以下代码时:
this.ViewLocationCache.InsertViewLocation(controllerContext.HttpContext, cacheKey, virtualPath);
Run Code Online (Sandbox Code Playgroud)
我将鼠标悬停在this.ViewLocationCache上它只返回{System.Web.Mvc.NullViewLocationCache} - 建议什么都没有添加?
我有一个内部开发的自定义视图引擎.在同一个项目中,我想将Razor用于某些页面,将我的自定义引擎用于某些页面.MVC框架如何选择使用哪个引擎?顺便说一下,我的自定义引擎不需要任何模板,它根据数据库中的元数据呈现页面.对于我的自定义引擎,我不想设置任何模板文件.我期待的是应该有一种方法来驱动框架使用基于控制器名称和操作名称的特定引擎.这种灵活性是否存在于MVC3中?
我正在对视图,控制器和模型进行分组.结构是
~/Controllers
-- /_Shared
-- -- /Views
-- -- /Content
-- -- /Scripts
-- /Home
-- -- /Models
-- -- /Content
-- -- /Scripts
-- -- /Views
-- -- HomeController.cs
-- /Account
-- -- /Models
-- -- /Views
...
Run Code Online (Sandbox Code Playgroud)
浏览与工作的部分观点,但布局(母版视图)不工作.当我在.cshtml文件中指定布局时,如:
@{ Layout = "SimpleSharedLayout"; }
Run Code Online (Sandbox Code Playgroud)
我收到此错误:在以下路径中找不到布局页面"SimpleLayout":
"〜/控制器/帐号/浏览/ SimpleSharedLayout".
Asp.NET只搜索当前控制器目录中的布局,而不查看共享文件夹*(位于〜/ Controllers/_Shared/Views)*
虽然这很好用.
@Html.Partial("SharedPartialView")
Run Code Online (Sandbox Code Playgroud)
我必须指定具有完整路径的布局
@{ Layout = "~/Controllers/_Shared/Views/SimpleSharedLayout.cshtml"; }
Run Code Online (Sandbox Code Playgroud)
这不是一件很难的事情,但我为能够让它无法工作而感到疯狂.
使用IIS Express,VS 2012,.NET 4.5
你对我失踪的东西有所了解吗?
我的视图引擎:
public class AreaViewEngine : RazorViewEngine
{
public AreaViewEngine() …Run Code Online (Sandbox Code Playgroud) 我使用以下内容呈现字符串的局部视图...
protected string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
using (var sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
Run Code Online (Sandbox Code Playgroud)
然而它返回带有如下所示的奇怪标签的html ...(我已经包含了一个小部分作为它的大视图)
<$A$><div</$A$><$B$> class="modal hide fade"</$B$><$C$> id="dialog"</$C$><$D$>
Run Code Online (Sandbox Code Playgroud)
整个HTML都会发生这种情况.这部分看起来应该是......
<div class="modal hide fade" id="dialog" style="display: none;">
Run Code Online (Sandbox Code Playgroud) asp.net-mvc viewengine stringwriter asp.net-mvc-partialview asp.net-mvc-4