ASP.NET 5网站(Razor)

时间:2015-10-31 03:05:21

标签: razor asp.net-core

我正在VS2015和ASP.NET 5中构建一个由WEB API驱动的角度应用程序。

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

基本上你可以去localhost / index.cshtml 假设页面上有@ DateTime.Now.ToString()之类的东西,它会返回一个白页,上面有日期。

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

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

1 个答案:

答案 0 :(得分:0)

可以将每个页面翻译成字符串。我用它来做电子邮件模板。 您可以设置自己的路由到通用控制器或创建自己的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();
        }
    }