我是 T4 模板的新手,我在想如何通过 T4 创建和提供生成的 html 页面。
我在test1.tt文件中有这部分代码
<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<div id='test'></div>
<script type='text/javascript'>
function insertText () {
document.getElementById('test').innerHTML = 'Some text here';
}
</script>
我有生成它的 c# 代码
[HttpGet]
public string Generate([FromBody]dynamic value)
{
try
{
string webResponseText = new test1().TransformText();
return webResponseText;
}
catch(Exception ex)
{
throw ex;
}
}
我想做的一个类似的逻辑例子是 “你为一个朋友创建了一个包含所有文件的程序,但是如果你想让你的朋友运行这个程序,你会把你文件中编译后的文件交给他,你不会告诉他拿走所有文件,编译它们然后下次运行.exe"
类似的东西,但现在我的朋友是浏览器。
那么,是否可以运行这个 .tt 文件,运行其中的所有 javascript 代码并获取生成的输出?
我有一个 Asp.Net 核心项目,因为 T4 在核心中没有得到完全支持,我有这个调用其他 web api 的操作,使所有“工作”
[Produces("text/html")]
[HttpGet]
public async Task<String> T4test()
{
using (var client = new HttpClient())
{
try
{
client.BaseAddress = new Uri(WebAPI);
var response = await client.GetAsync("Generate");
response.EnsureSuccessStatusCode();
string res = await response.Content.ReadAsStringAsync();
res = res.Trim('"');
return res;
}
catch (Exception ex)
{
throw ex;
}
}
}
我运行
localhost:12895/Entities/T4test
此操作调用运行 .tt 文件的其他函数“生成”。我得到的结果是一个空的 html 页面,使用 f12 我可以看到 javascript 代码存在但从未调用过,不要更改元素的文本。
所以,我的问题很简单,可以使用 T4 创建一个运行 javascript 文件的 html 页面并将其返回到我的核心操作吗?这个类型是字符串?是否可以创建一个编译文件并准备好浏览器?