我认为微软必须有理由用RAZOR语法增强ASP.Net.
在visual studio 的Create New Website Project对话框中,还有另一个创建ASP.Net(Razor)的选项.我第一次遇到Razor一词是因为当我读一本关于Asp.Net MVC的书时,我不知道它存在于ASP.Net
我知道Razor的语法是什么,在MVC 3中引入.在问这个问题之前,我决定为ASP.Net(Razor)创建一个测试项目,看看它与普通的ASP.Net webforms和ASP.Net有什么不同. MVC.我发现没有像我们在MVC中那样的模型/视图/控制器文件夹.
我发现Master页面的指定方式不同,Master页面更清晰,没有更多 <asp:ContentPlaceHolder />
但我的问题是:
.cshtml
,没有更多的代码隐藏吗?更新: 特别是ASP.NET Web页面旨在使已经了解HTML的人们可以轻松地向其页面添加服务器处理.对于学生,业余爱好者,一般不熟悉编程的人来说,这是一个不错的选择.对于具有非ASP.NET Web技术经验的开发人员来说,它也是一个不错的选择
更新 ASP.NET网页 ASP.NET Web Pages面向那些想要一个简单的Web开发故事的开发人员,这与PHP一致.在Web页面模型中,您可以创建HTML页面,然后将基于服务器的代码添加到页面中,以便动态控制标记的呈现方式.Web Pages专门设计为轻量级框架,对于了解HTML但可能没有广泛编程经验的人来说,它是进入ASP.NET的最简单的入口点 - 例如,学生或业余爱好者.对于了解PHP或类似框架的Web开发人员来说,这也是开始使用ASP.NET的好方法.
拜托,我需要你的技术意见.谢谢.
我知道之前已经提出了类似的问题,但唯一的答案是六年了,人们提到的项目似乎没有被维护.
我想在控制台应用程序或类库中使用Razor来呈现HTML.我还想在.cshtml文件中使用Intellisense.
目前,我可以通过以下方式对此进行评审:
Custom Tool
为RazorTemplatePreprocessor
这会导致识别Razor语法.所以,如果你有Test.cshtml
,它会生成一个名为的类Test
,你可以这样使用:
var test = new Test();
test.Model = "Hi there";
var html = test.GenerateString();
Console.WriteLine(html);
Run Code Online (Sandbox Code Playgroud)
这对我的目的来说已经足够好了.但是,.cshtml文件中的实际编码体验非常糟糕:
var
因为它是C#2.@model
关键字无法识别.奇怪的是,如果你忽略所有这些错误,HTML实际上是正确生成的,包括使用Razor引擎抱怨的库和@model关键字.但是,这会导致严重的心理混乱,因为如果您有任意数量的.cshtml文件,您很快就会遇到成千上万的这些错误与真正的错误混在一起.
我能做些什么来使实际的Razor编码体验更像是在ASP.NET Web应用程序中工作吗?
我试图在ASP.NET Core MVC中使用ICompositeViewEngine替换System.Web.Mvc中的ViewEngine,因为它在.NET Core中不再可用.我通常尝试在此项目中将webform从ASP.NET迁移到ASP.NET Core.
我找到了以下解决方案:MVC 6 Controller中的ControllerContext和ViewEngines属性在哪里?我相信这可以解决我的问题.我还在github问题中找到了与ServiceProvider类似的引擎创建:https://github.com/aspnet/Mvc/issues/3091
但是,我不确定我可能会缺少哪些依赖项或框架,因为我是.NET的新手.我有以下命名空间:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ViewEngines;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.Extensions.DependencyInjection;
Run Code Online (Sandbox Code Playgroud)
我认为这可能与我的问题有关.
我原来的代码是:
public static string RenderPartialToString(Controller controller, string viewName, object model)
{
controller.ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
return "document.write('" + sw.GetStringBuilder().Replace('\n', ' ').Replace('\r', ' ').Replace("'","\\'").ToString() + "');";
}
}
Run Code Online (Sandbox Code Playgroud)
现在我尝试使用以下任一方法:
var engine = Resolver.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine;
var …
Run Code Online (Sandbox Code Playgroud)