在for循环C#创建的链接中传递会话变量

时间:2018-12-03 21:34:32

标签: c# asp.net-mvc session-variables

我有一个页面在阅读一个提供ID列表的api。 然后,我希望它创建一个链接,然后将该ID发送到另一个API以获取该单个对象。 我已经手动操作了页面,但是现在试图在它们之间发送数据是个问题。

我当前的代码是

@{
    for (var i = 0; i < Model.records.Count; i++)
    {
        string currID = Model.records[i].ID;
        <td>@Html.ActionLink(Model.records[i].ID, "Game", "Home", Session["game"] = currID)</td>
        <td>@Model.records[i].GameName</td>
        <td>@Model.records[i].Player1</td>
        <td>@Model.records[i].Player2</td>
        <td></td><br />
    }    
}

这是做什么的,我理解为什么,是将最终记录的ID传递给api,并始终为我提供该结果,因为i是此时的最终值。 我如何才能告诉链接它需要保留它的i迭代并传递该值?

1 个答案:

答案 0 :(得分:0)

使用此表达式

Session["game"] = currID

实际上,您正在使用currID的当前值为每次迭代更新循环中的Session项目值。

如果要发送“会话”项值作为查询/路由值,则可以使用需要5个参数的重载。第四个参数是一个匿名对象,您将在其中指定键和值,这些键和值将用于生成URL。

例如,以下代码将添加gameId查询字符串项,其值将是存储在Session["game"]中的值

@{
    var game = Session["game"]; 
    for (var i = 0; i < Model.records.Count; i++)
    {
        string currID = Model.records[i].ID;
        <td>@Html.ActionLink(Model.records[i].ID, "Game", "Home",
                                    new { gameId = game }, null)</td>
        <td>@Model.records[i].GameName</td>

    }    
}

假设您的Game操作方法具有名称为gameId的参数

public ActionResult Game(string gameId)
{
   // to do : Return something
}

如果您也想发送currID,也将其传递

@Html.ActionLink(Model.records[i].ID, "Game", "Home",
                                        new { gameId = game, currId = currID }, null)

第五个参数(我通过null的地方)是htmlAttributes的参数,它将用于将其他HTML属性添加到此帮助器呈现的元素中(例如:如果要添加CSS类,等等