标签: viewengine

ASP.NET MVC视图引擎解析序列

我创建了一个简单的ASP.NET MVC 1.0版应用程序.我有一个ProductController,它有一个动作索引.在视图中,我在Product子文件夹下创建了相应的Index.aspx.

然后我引用了Spark dll并在同一Product视图文件夹下创建了Index.spark.Application_Start看起来像

    protected void Application_Start()
    {
        RegisterRoutes(RouteTable.Routes);

        ViewEngines.Engines.Clear();
        ViewEngines.Engines.Add(new Spark.Web.Mvc.SparkViewFactory());

        ViewEngines.Engines.Add(new WebFormViewEngine());

    }
Run Code Online (Sandbox Code Playgroud)

我的期望是,由于Spark引擎在默认WebFormViewEngine之前注册,当浏览Product controller中的Index操作时,应该使用Spark引擎,并且WebFormViewEngine应该用于所有其他URL.

但是,测试显示Product控制器的Index操作也使用WebFormViewEngine.

如果我注释掉WebFormViewEnginer的注册(代码中的最后一行),我可以看到Index动作由Spark引擎呈现,其余的URL生成错误(因为defualt引擎已经消失),它证明了我所有的Spark代码是正确的.

现在我的问题是视图引擎是如何解决的?为什么注册序列不生效?

asp.net-mvc viewengine spark-view-engine

10
推荐指数
1
解决办法
3447
查看次数

Razor Generator:如何使用库中编译的视图作为主mvc项目中定义的master的局部视图

我们有一个ASP.NET MVC 4应用程序,其中包含大约3000个视图.我们决定将这组视图拆分为单独的DLL,并使用RazorGenerator进行编译.我们只在主MVC项目中保留主_Layout.cshtml和相关文件.

我们无法将DLL中的部分视图与主MVC项目中的主视图一起加载.详细说明如下.

已经做了什么:

  1. 视图成功编译成DLL(我已经确认它们在二进制文件中)

  2. 使用Global.asax.cs中Application_Start中的以下代码为包含视图的每个DLL创建并注册PrecompiledMvc​​Engine对象:

.

foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
{
    // ...
    // some code determining whether we've got an assembly with views
    // ...

    var engine = new PrecompiledMvcEngine(assembly);
    engine.UsePhysicalViewsIfNewer = true;

    ViewEngines.Engines.Insert(0, engine);

    // StartPage lookups are done by WebPages. 
    VirtualPathFactoryManager.RegisterVirtualPathFactory(engine);
}
Run Code Online (Sandbox Code Playgroud)

什么行不通:

我无法在其中一个库(比如Partial.cshtml)中定义部分视图的情况下加载主MVC项目中定义的视图(例如_Layout.cshtml).我在控制器的操作中使用以下代码告诉MVC框架我请求了哪个视图:

var view = "~/Views/" + partialName + ".cshtml";    
return View(view, "~/Views/Shared/_Layout.cshtml", model);
Run Code Online (Sandbox Code Playgroud)

错误消息显示:未找到视图'〜/ Views/Partial.cshtml'或其主节点,或者没有视图引擎支持搜索的位置.搜索了以下位置:〜/ Views/Partial.cshtml~/Views/Shared/_Layout.cshtml

当我尝试通过指定以下任一项来单独加载视图时:

return View("~/Views/Shared/_Layout.cshtml", model);
Run Code Online (Sandbox Code Playgroud)

要么

return View(view, model);
Run Code Online (Sandbox Code Playgroud)

,找到了正确的观点.但是我需要将它们装在一起.当我在主MVC项目中拥有所有必需的.cshtml文件时,代码可以正常工作.

请注意,已编译的DLL中的视图具有PageVirtualPathAttribute,其路径与控制器操作中指定的路径相同,例如:

namespace SomeBaseNamespace.Views
{
    [GeneratedCode("RazorGenerator", "1.5.0.0"), …
Run Code Online (Sandbox Code Playgroud)

viewengine razor asp.net-mvc-4 razorgenerator

10
推荐指数
1
解决办法
8206
查看次数

ASP MVC的任何视图引擎都是"可设计的"吗?

这是我的问题:

我对图形/网页设计师实际生成的"阻抗不匹配"以及标准ASP MVC视图引擎所需要的内容感到不安.

基本上没有办法在视觉上设计视图,即动作的输出.没有WYSIWIG设计师.从静态HTML设计到MVC应用程序的唯一方法是手动翻译,以及带来的所有痛苦.

我一直梦想的是一个视图引擎+设计工具,它可以让设计师真正完成他们的工作,并让它在网络应用程序中"正常工作".

像Blend为WPF做的事情.

是的,我们在Web窗体中有类似的东西,但它有其自身的局限性,我仍然不认为大多数设计师都可以使用它.

当然可以使用严格的语法(模板中没有abitrary代码)编写视图引擎+设计器工具,并允许设计器工具模拟您键入的视图并渲染虚拟数据以显示输出.并且让设计师设计一个动作 - 并让工具指示或分解屏幕上的各种视觉元素(子视图等).

asp.net-mvc viewengine

9
推荐指数
1
解决办法
229
查看次数

为Visual Studio安装剃刀视图引擎

我刚下载并安装了Web Matrix beta.
我真的很喜欢剃刀视图引擎.
与其说是Web Matrix IDE.

有没有办法在不安装WebMatrix的情况下安装razor视图引擎以便在Visual Studio中使用?

.net asp.net viewengine visual-studio razor

9
推荐指数
2
解决办法
8241
查看次数

单元测试MVC3 Razor助手/没有字符串的视图

我正在尝试MVC3 Razor视图引擎,我正在探索的功能之一就是能够对视图进行单元测试.

我已经看到了许多示例,其中Razor视图可以编译为程序集并呈现为字符串.问题是它呈现为一个字符串,所以我留下了字符串搜索!

这是我想要做的.

  1. 创建一个Razor助手
  2. 编译助手
  3. 运行编译好的帮助程序,传入ViewModel
  4. 获取帮助程序的输出作为某种HTML/XML /树结构

我想这样做的原因是我可以测试输出的特定部分.帮助程序可能会吐出包含各种输出块的HTML.我想要做的是查看是否有一个具有特定值的复选框(例如).如果您已经看过Selenium测试,它与我想要做的类似,除了不是服务器驱动的测试.

有没有办法让编译的Razor(或其他视图引擎)视图发出除字符串以外的东西?

testing unit-testing viewengine razor asp.net-mvc-3

9
推荐指数
1
解决办法
2624
查看次数

扩展Razor View引擎以处理渲染

我想知道是否有任何方法可以扩展剃刀视图引擎功能来处理一些自定义文本/标记并在渲染之前解析/继续.假设我使用了一些特殊的标签,${}如下所示:

<span>${some word}</span>
Run Code Online (Sandbox Code Playgroud)

然后,我想在渲染之前解析视图并用局部值替换"某个世界".当然,这可以通过其他方式完成,但我想知道是否有任何方法可以使这项工作.

asp.net-mvc viewengine razor asp.net-mvc-4

9
推荐指数
1
解决办法
3884
查看次数

Node.js Express的示例将Underscore.js注册为视图引擎?

Underscore.js没有像ejs和jade这样的编译函数,但是可以作为Node.js模块工作.有人请提供一个如何使其在Express应用程序内工作的示例吗?

javascript viewengine node.js express underscore.js

8
推荐指数
1
解决办法
6953
查看次数

如何下载Razor View引擎

我想下载并安装ASP.Net MVC 2的razor视图引擎.从哪里可以下载和安装?

asp.net-mvc viewengine razor

7
推荐指数
1
解决办法
8269
查看次数

ASP.NET MVC3 Razor - 在将视图放置在备用位置时丢失了智能感知?

VS2010 Ultimate,ASP.NET MVC 3 w/Razor.

我在我的MVC3应用程序中创建了一个自定义视图引擎,允许嵌套区域,如此

~/areas/admin
    /marketing
        /views
            index       
        /controllers
            marketingController
        /email
            /views
                index
                ...
            /controllers
                emailController
        /templates
            /views
                index
                edit
                ...                  
            /controllers
                templatesControler
Run Code Online (Sandbox Code Playgroud)

等等

这一切都很有效,除了我似乎在不在标准~/areas/area_name/views/myview.cshtml位置的视图中丢失了智能感知.

有什么建议?

更新

只是在百灵鸟上,我添加了@inherits声明

@inherits System.Web.Mvc.WebViewPage<Namespace.Models.Class>
Run Code Online (Sandbox Code Playgroud)

和intellisense开始工作.然后我删除了该声明,并继续工作.

项目文件中是否有一些设置或告诉Visual Studio应用于打开文件的哪种intellisense,而不是文件扩展名?(如果扩展是所有使用的,我希望它更加一致).

更新2

虽然在我的每个视图文件夹中添加web.config都可以很好地解决问题,但是将razor配置放在根web.config中则不行.

添加所需的system.web.webPages.razor部分后~/web.config,

  1. 我将一个Razor .cshtml视图文件添加到我的一个嵌套视图文件夹中.
  2. 智能感知有效.
  3. 我重命名该文件(保留.cshtml扩展名)
  4. Intellesense和语法突出显示停止工作.
  5. 我关闭重命名的文件并重新打开它 - 一切都重新开始工作.
  6. 或者,我没有关闭并重新打开文件,而是将其重命名为原始名称,然后重新开始工作.

这感觉就像一个VS错误 - 重命名一个文件(但保留适当的扩展名)不应该,据我所知,导致这种行为.我将继续将web.config每个视图文件夹放在每个视图文件夹中,因为它可以解决问题,但是当我希望这些设置像其他web.config设置一样通过解决方案树传播时,必须弄乱解决方案.

值得注意的是,无论Razor配置位于何处,无论intellesense是否正常工作,该网站都能继续正常运行.

解决了

我被Powers认为(非常快),这是一个已知的问题,在MVC3 RTM和VS2010 SP1中得到纠正.更新我的MVC3安装并添加SP1后问题消失了.

directory viewengine razor asp.net-mvc-3

7
推荐指数
1
解决办法
4549
查看次数

.NET MVC自定义视图引擎布局

在方法中的自定义视图引擎中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)

c# asp.net-mvc layout viewengine

7
推荐指数
1
解决办法
625
查看次数