是否可以在 View 中使用 ValueTuple 作为模型?

Is it possible to use ValueTuple as model in View?

是否可以在 ASP.NET Core MVC 的视图中使用值元组作为模型类型?我的意思是这样的:

控制器:

public IActionResult Index()
{
    ...

    (int ImportsCount, int ExportsCount) importsExports = (imports.Count, exports.Count);
    return View(importsExports);
}

查看:

@model (int ImportsCount, int ExportsCount)

但是,使用此设置,呈现页面时会引发异常。我正在使用安装了 System.ValueTuple NuGet 包的 .NET 4.6.2。

通过测试,我发现了以下内容:

工作吗(生成数百个视图编译错误):

@model (string, string) 
@model (string x, string y)

是否有效:

@model ValueTuple<string, string>
@{ var ConvertedModel = ((string x, string y)Model);

<h1>@Model.Item1 | @ConvertedModel.x </h1>
<h1>@Model.Item2 | @ConvertedModel.y </h1>

编辑:

通过查看此 (here) 的 GitHub 问题,Razor 似乎在设计时支持 C# 7,但在 Compile/Run 时不支持。

更新:(最初回答后 2 年多)

在 .NET core 3.1 中,以下内容非常适合部分视图模型

 @model (int Page, string Content, int PageSize, int FileLinkId)

是的。我能够完全发挥作用。

就我而言,将 Microsoft.CodeAnalysis.CSharp v2.2.0(不晚于)NuGet 包添加到主项目是必要且充分的。

我的环境:

  • Visual Studio15.3(目前最新稳定版2017)
  • .NET 核心 1.1
  • 语言版本 = 最新
  • 之前从 .NET Core 1.0 升级的项目/Visual Studio 2015
  • 没有明确设置 Razor C# 版本。

参考文献:

有趣的是,不知何故提供的解决方案不起作用,

@model ValueTuple<string, string>
@{ var ConvertedModel = ((string x, string y)Model);

<h1>@Model.Item1 | @ConvertedModel.x </h1>
<h1>@Model.Item2 | @ConvertedModel.y </h1>

但以下有效:

@model ValueTuple<string, string>
@{ (string x, string y) ConvertedModel = (Model);

<h1>@Model.Item1 | @ConvertedModel.x </h1>
<h1>@Model.Item2 | @ConvertedModel.y </h1>

一段时间后进行了一些试验,我使用问题文本中的语法进行了操作。 IE。这两个选项现在都有效:

@model (string, string) 
@model (string x, string y)

这意味着不再需要明确声明 ValueTuple 关键字。

我当前的设置是 Visual Studio 15.8.0 和 ASP.NET Core 2.1.1。

编辑:也适用于 Visual Studio 2019