我有一个C#服务器,我使用RazorEngine
NuGet库手动渲染一些Razor视图。提供给视图的模型是匿名类型,创建如下:
new[] { Foo = "Bar", Baz = "Example" }
由于我渲染模板的方式,Visual Studio并不了解我的模型。这意味着Visual Studio认为这样的代码无效,即使它工作正常:
<p>@Model.Foo</p>
为了解决这个问题,我发现了@model
指令,但这似乎只适用于作为指定模型的类。例如,这些都被视为无效:
@model { string Foo, string Baz }
@model (string Foo, string Baz)
有什么方法可以让@model
使用匿名类型吗?或者,命名元组也会满足编译器,因为我从不更新模板中任何模型的字段。
答案 0 :(得分:0)
是的,你可以,但我通常不会像强类型视图模型那样有优势。
像这样创建你的模型:
dynamic model = new ExpandoObject();
model.Foo = "Bar";
model.Baz = "Example";
然后你可以在视图中访问它,没问题
<h1>@Model.Foo</h1>
<h2>@Model.Baz</h2>
NB。默认情况下,RazorPage<T>
定义为RazorPage<dynamic>
,因此无需声明@model dynamic
。