我很难在Razor视图中显示Tuple<int, int>
值。该Tuple<int, int>
插入控制器的TempData["SucceededFailed"]
中,如下所示:
Tuple<int, int> SucceededFailed = new Tuple<int, int>(1, 0);
TempData["SucceededFailed"] = SucceededFailed;
我正在寻找正确的语法,为了在我的视图中显示Tuple,我尝试了三个,但都抛出了异常。
查看
<tr>
<td>
<h3>Result</h3>
<h4>Succeeded:</h4>
<h4>Failed:</h4>
</td>
<td>
@if (TempData["SucceededFailed"] != null)
{
<h3></h3>
<h4>@{(Tuple<int, int>)TempData["SucceededFailed"].Item1;}</h4>
<h4>@{(Tuple<int, int>)TempData["SucceededFailed"].Item2;}</h4>
}
</td>
</tr>
以上代码在以下行失败:
<h4>@{(Tuple<int, int>)TempData["SucceededFailed"].Item1;}</h4>
错误
只有赋值、调用、递增、递减、等待和新对象表达式可以用作语句
我还尝试了以下操作:
@if (TempData["SucceededFailed"] != null)
{
<h3></h3>
<h4>(Tuple<int, int>)@TempData["SucceededFailed"].Item1</h4>
<h4>(Tuple<int, int>)@TempData["SucceededFailed"].Item2</h4>
}
哪个失败在:
<h4>(Tuple<int, int>)@TempData["SucceededFailed"].Item1</h4>
错误
"对象"不包含"Item1"的定义,也没有扩展接受"object"类型的第一个参数的方法"Item1"可以是已找到(您是否缺少using指令或程序集引用?)
最后我尝试了以下代码,这是唯一的代码,给了我正确的语法高亮显示:
@if (TempData["SucceededFailed"] != null)
{
<h3></h3>
<h4>@(Tuple<int, int>)@TempData["SucceededFailed"].Item1</h4>
<h4>@(Tuple<int, int>)@TempData["SucceededFailed"].Item2</h4>
}
哪个失败在:
<h4>@(Tuple<int, int>)@TempData["SucceededFailed"].Item1</h4>
错误
"System.Tuple"是一种"类型",但使用起来像"变量">
我做错了什么?
您需要将TempData
包装在括号中,让编译器知道它是Tuple<int, int>
:
@(((Tuple<int, int>)TempData["SucceededFailed"]).Item1)
注:.Item1
之前和@
之后的额外括号。这告诉编译器,您要获取TempData
中的对象,将其强制转换为Tuple<int, int>
,然后访问该强制转换结果的Item1
属性。