我正在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开始,这是否可行?
答案 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();
}
}