【问题标题】:ASP.NET 5 Website (Razor)ASP.NET 5 网站(剃刀)
【发布时间】:2015-10-31 03:05:21
【问题描述】:

我正在 VS2015 和 ASP.NET 5 中构建一个由 WEB API 提供支持的 Angular 应用程序。

在以前的 ASP.NET 版本中,可以使用 CSHTML 页面代替 HTML 页面,而无需构建 MVC 控制器和路由。例如,如果您创建了一个 ASP.NET 网页 (Razor) 项目。

基本上你可以去 localhost/index.cshtml 并假设页面上有类似@DateTime.Now.ToString() 的内容,它将返回一个带有日期的白页。

我想通过 CSHTML 而不是 HTML 静态文件来提供我的客户端标记,因为我想利用一些方便的服务器端东西,比如 TagHelpers。

从 ASP.NET 5 的 Beta8 开始,这是否可行?

【问题讨论】:

    标签: razor asp.net-core


    【解决方案1】:

    可以将每一页翻译成字符串。我将此用于电子邮件模板。 您可以设置自己的通用控制器路由或创建自己的middleware

    使用此代码,您可以生成字符串视图

     RenderViewToString(@"/Views/Email/ActivateEmail", new ActivateEmail() { Emailaddress = user.Email, Callback = callbackUrl })
    
     public async Task<string> RenderViewToString<TModel>(string view, TModel model)
        {
            var viewEngineResult = _compositeViewEngine.FindView(_actionContext, view);
            var viewData = new ViewDataDictionary<TModel>(new EmptyModelMetadataProvider(), new ModelStateDictionary())
            {
                Model = model
            };
            using (var sw = new StringWriter())
            {
                var viewContext = new ViewContext(
                    _actionContext,
                    viewEngineResult.View,
                    viewData,
                    new TempDataDictionary(new HttpContextAccessor(), new SessionStateTempDataProvider()),
                    sw,
                    new HtmlHelperOptions());
                await viewEngineResult.View.RenderAsync(viewContext);
                return sw.ToString();
            }
        }
    

    【讨论】:

    • 是的,我想过这个 - 但更想知道框架内是否存在支持。我想像 app.UseRazorPages() in startup.cs
    猜你喜欢
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 2020-03-24
    • 2011-04-12
    • 2011-06-09
    • 2011-12-05
    相关资源
    最近更新 更多