我可以使用匿名类型作为Razor模型吗?

时间:2017-11-22 10:44:19

标签: c# razor types anonymous-types

我有一个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使用匿名类型吗?或者,命名元组也会满足编译器,因为我从不更新模板中任何模型的字段。

1 个答案:

答案 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