是否可以在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。
答案 0 :(得分:8)
通过一些测试,我发现了以下内容:
不是否有效(生成视图编译错误):
@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>
编辑:
通过查看GitHub问题(here),似乎在Design Time Razor支持C#7,但不支持编译/运行时。
答案 1 :(得分:3)
是的。我能够完全发挥作用。
在我的情况下,将Microsoft.CodeAnalysis.CSharp v2.2.0(以后)NuGet包添加到主项目是必要且充分的。
我的环境:
参考文献:
答案 2 :(得分:1)
一段时间后进行了一些实验,然后我将其与问题文本的语法一起使用。就是这两个选项现在都可以使用:
@model (string, string)
@model (string x, string y)
这意味着不再需要明确声明ValueTuple
关键字。
我当前的设置是Visual Studio 15.8.0和ASP.NET Core 2.1.1。
答案 3 :(得分:0)
有趣的是,提供的解决方案无论如何都不起作用,
@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>