Is it possible to use value tuples as model type in views in ASP.NET Core MVC? I mean like this:
Controller:
public IActionResult Index()
{
...
(int ImportsCount, int ExportsCount) importsExports = (imports.Count, exports.Count);
return View(importsExports);
}
View:
@model (int ImportsCount, int ExportsCount)
However, using this setup, exception is raised when page is rendered. I am using .NET 4.6.2 with System.ValueTuple NuGet package installed.
By doing some testing, I found the following:
Does not work (generates hundres of view compilation errors):
@model (string, string)
@model (string x, string y)
Does work:
@model ValueTuple<string, string>
@{ var ConvertedModel = ((string x, string y)Model);
<h1>@Model.Item1 | @ConvertedModel.x </h1>
<h1>@Model.Item2 | @ConvertedModel.y </h1>
EDIT:
By looking at the GitHub issue for this ( here ), it seems that at Design Time Razor supports C# 7, but not at Compile/Run Time.
Update: (2+ years after the initial answer)
In .NET core 3.1 the following works perfectly for a partial view model
@model (int Page, string Content, int PageSize, int FileLinkId)
Yes it is. I was able to get this fully working.
In my case it was necessary and sufficient to add the Microsoft.CodeAnalysis.CSharp v2.2.0 ( not later ) NuGet package to the main project.
My environment:
References:
Did some experimenting after a while and I got it working with the syntax from question's text. Ie. both these options are working now:
@model (string, string)
@model (string x, string y)
That means there is no need to explicitly state ValueTuple
keyword anymore.
My current set up is Visual Studio 15.8.0 and ASP.NET Core 2.1.1.
EDIT: Also works in Visual Studio 2019
Interestingly, somehow the solution offered did not work,
@model ValueTuple<string, string>
@{ var ConvertedModel = ((string x, string y)Model);
<h1>@Model.Item1 | @ConvertedModel.x </h1>
<h1>@Model.Item2 | @ConvertedModel.y </h1>
But below worked:
@model ValueTuple<string, string>
@{ (string x, string y) ConvertedModel = (Model);
<h1>@Model.Item1 | @ConvertedModel.x </h1>
<h1>@Model.Item2 | @ConvertedModel.y </h1>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.