Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# asp.net web项目中的razor视图_C#_Asp.net_Razor_Views - Fatal编程技术网

C# asp.net web项目中的razor视图

C# asp.net web项目中的razor视图,c#,asp.net,razor,views,C#,Asp.net,Razor,Views,我目前正在研究视图引擎,Razor视图对我来说非常有趣。我正在开发一个asp.NET4.0WebForms应用程序。Razor视图我可以找到的示例主要是MVC应用程序 是否可以将Razor视图集成到web表单应用程序中?这样做是否有益?我希望这样做的主要原因是为我的应用程序架构创建一个新的层,并可能创建一个可以测试的新区域。当然可以!通过使用来自Microsoft的,您可以以通常加载UserControl的方式加载razor类,方法是提供类/razor文件的路径。您得到的是一个可以执行的实例,它

我目前正在研究视图引擎,Razor视图对我来说非常有趣。我正在开发一个asp.NET4.0WebForms应用程序。Razor视图我可以找到的示例主要是MVC应用程序


是否可以将Razor视图集成到web表单应用程序中?这样做是否有益?我希望这样做的主要原因是为我的应用程序架构创建一个新的层,并可能创建一个可以测试的新区域。

当然可以!通过使用来自Microsoft的,您可以以通常加载UserControl的方式加载razor类,方法是提供类/razor文件的路径。您得到的是一个可以执行的实例,它将为您提供一个可以在页面上打印出来的字符串

我自己完成了这项工作,并实现了它,它的源代码可以从免费获得。我将在这里强调重要的部分

确保在web.config中注册了.cshtml文件的生成提供程序

确保您有必要的system.web.webPages.razor配置设置

实例化.cshtml文件的实例,如下所示
var webPage=webPage.CreateInstanceFromVirtualPath(_relativeFilePath)()

像这样获取Razor类的输出

var httpContext = new HttpContextWrapper(HttpContext.Current);
var pageContext = new WebPageContext(httpContext, webPage, null);

var sb = new StringBuilder();
using (var writer = new StringWriter(sb))
{
   webPage.ExecutePageHierarchy(pageContext, writer);
}

string output = sb.ToString();

只需在WebForms页面上输出字符串即可

Razor在允许您在HTML中散布C#代码方面表现出色。WebForms擅长(就像它所做的那样)使用带有自定义“标记”的XML,这些标记转换为服务器端控件,与HTML一起生成最终的纯HTML结果。在WebForms世界中使用Razor,您的动机是什么?您可以看到哪些优势?@kirk Razor是将代码与html混合使用的一种很好的语法,许多设计师/web开发人员对此拍手称快。对于喜欢Razor语法的人来说,这是一个降低现有WebForms应用程序维护门槛的完美方法。@Pauli,你没有真正提到我的观点。当使用WebForms时,关键是你不应该在你的代码前端加入C代码。@KirkWoll,你是在什么基础上构建这个语句的?我认识很多开发人员讨厌标签,只想简单地处理循环和if语句,而且非常受欢迎。我知道WebForms主要是关于网页没有的控制树、事件和回发,但开发就是使用最有效的工具,如果大型WebForms应用程序的一小部分最好由喜欢Razor的人来维护,那么这就是你应该做的@Pauli,但您描述的是ASP.NET/MVC。你自己也承认,为什么要把这些功能硬塞进WebForms中“主要是关于控制树、事件和回发的。”如果我不认为你对你的问题不诚实,“那么你的陈述是建立在什么基础上的?”我想向您介绍大量MSDN官方文档,这些文档解释了他们认为您应该如何开发WebForms应用程序——相信我,这不是您一直在描述的世界。您可以将Razor视图集成到web应用程序中,但不容易集成到现有的WebForm中。换句话说,您可以拥有一个既包含web表单页面又包含Razor页面的web应用程序,但让web表单包含Razor部分要复杂得多@klabranche提供了Hanselman关于这个主题的一个很好的链接。@kingdango因为所有Razor类最终都只输出字符串,所以它非常有意义,而且在WebForms应用程序中的任何给定位置实例化、执行和编写Razor类的输出都非常容易。Ostero我喜欢Razor,因为它的灵活性@kingdango我喜欢Razor,因为它有很好的语法,但我喜欢asp.net,因为它的灵活性:)我只是喜欢在每一条评论上都保持领先。。。我很想看看未来会发生什么。:-)