我会后从这里CodePlex Discussion我的回应:
我不知道这是目前可能的。当您使用代码块(@ {})时,实际上是在代码中写入代码,例如你的上面的代码会做这样的事情:
public void Execute()
{
this.Clear();
public class MyClass {
public MyClass() {
Three = new List<string>();
}
public string One { get; set; }
public int Two { get; set; }
public List<string> Three { get; set;}
}
}
......这当然是无效的C#。你将要面对的另一个问题是,要使用xml序列化/反序列化,类型必须是已知的,但是如果你要在模板本身中定义你的类型,那么你如何能够首先对它进行反序列化呢?
你可以做什么,是使用自定义的基本模板:
public class CustomTemplateBase<T> : TemplateBase<T>
{
public dynamic Instance { get; set; }
public dynamic CreateInstance(string typeName)
{
Type type = Type.GetType(typeName);
// You'd to your deserialisation here, I'm going to
// just cheat and return a new instance.
return Activator.CreateInstance(type);
}
}
使用动态属性和动态的返回类型,我们定义这将让我们创建一个实例(通过激活的方法或反序列化等)并在其上调用成员访问权限。要在模板中使用它,你可以这样做:
@{
Instance = CreateInstance("ConsoleApplication1.MyClass, ConsoleApplication1");
Instance.One = "Hello World";
}
<h1>@Instance.One</h1>
其中“MyClass”是在我的应用程序中定义的某处。重要的是,我正在为每个模板创建一个实例。
如果它不能完全绕过模型/视图/控制器的整个想法? – rene
你不能把'MyClass'放到一个单独的文件中吗?好吧,这样每个模板都会生成2个文件,但它会起作用。 –
你可以不选中“答案”,而选择“Kirk Woll”答案,因为这是正确的答案。 –