在视图中显示Tuple <int,int =“”>值</int,>

时间:2013-12-24 12:55:02

标签: c# asp.net-mvc razor tuples

我正在努力在Razor视图中显示Tuple<int, int>值。 这个Tuple<int, int>插入TempData["SucceededFailed"]控制器中,如下所示:

Tuple<int, int> SucceededFailed = new Tuple<int, int>(1, 0);
TempData["SucceededFailed"] = SucceededFailed;

我正在寻找正确的语法,为了在我的视图中显示元组,我尝试了三个但是所有这些都抛出异常。

查看

<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>

错误

  

'object'不包含'Item1'的定义,也没有扩展名   方法'Item1'接受'object'类型的第一个参数可以是   发现(您是否缺少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'是'type',但用作'variable'

我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

您需要将TempData括在括号中,让编译器知道它是Tuple<int, int>

@(((Tuple<int, int>)TempData["SucceededFailed"]).Item1)

注意:.Item1之前和@之后的额外括号。这告诉编译器,您希望将对象放在TempData中,将其强制转换为Tuple<int, int>,然后访问该强制转换结果的Item1属性。