[英]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)
但是,使用此设置,呈现页面时会引发异常。 我正在使用 .NET 4.6.2 和 System.ValueTuple NuGet 包。
通过一些测试,我发现了以下内容:
不工作(生成视图编译错误的hundres):
@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 问题(此处),似乎 Razor 在设计时支持 C# 7,但在编译/运行时不支持。
更新:(初始答案后 2 年以上)
在 .NET core 3.1 中,以下对于局部视图模型非常有效
@model (int Page, string Content, int PageSize, int FileLinkId)
是的。 我能够让它完全正常工作。
就我而言,将 Microsoft.CodeAnalysis.CSharp v2.2.0(不是更高版本)NuGet 包添加到主项目是必要且充分的。
我的环境:
参考资料:
一段时间后做了一些实验,我得到了它使用问题文本中的语法。 IE。 这两个选项现在都有效:
@model (string, string)
@model (string x, string y)
这意味着不再需要显式声明ValueTuple
关键字。
我当前的设置是 Visual Studio 15.8.0 和 ASP.NET Core 2.1.1。
编辑:也适用于 Visual Studio 2019
有趣的是,不知何故提供的解决方案不起作用,
@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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.