ASP.NET 具有多个变量的 Actionlink 为 NULL

ASP.NET Actionlink with multiple variables is NULL

我试图用 Html.Actionlink 将 2 个变量发送到我的控制器,但每次我这样做时,我得到一个 NULL 值,而不是我尝试发送的值。

这是我的Html.Actionlink:

<ul>
@{ Spot selectedSpot = (Spot)Session["SelectedSpot"];}
@foreach (Spot spot in (List<Spot>)Session["AllSpots"])
{
    if (selectedSpot != null)
    {
        if (selectedSpot.Id == spot.Id)
        {
            <li>@Html.ActionLink(spot.ToString(), "SetSpot", "EmsUser", new { selectedSpot = spot, user = Model }, new { @class = "selected"})</li>
        }
        else
        {
            <li>@Html.ActionLink(spot.ToString(), "SetSpot", "EmsUser", new { selectedSpot = spot, user = Model }, null)</li>
        }
    }
    else
    {
        <li>@Html.ActionLink(spot.ToString(), "SetSpot", "EmsUser", new { selectedSpot = spot, user = Model }, null)</li>
    }
}
</ul>

这是我的控制器:

public ActionResult SetSpot(Spot selectedSpot, User user)
    {
        Session["SelectedSpot"] = selectedSpot;
        user.SetId(0);
        return View("MakeReservation", user);
    }

编辑:

这就是 actionlink 对我的期望。 "EmsUser" 是控制器名称,"SetSpot" 是动作名称

我明白问题出在哪里了。 ActionLink 中指定的路由参数作为查询字符串参数发布到控制器操作。您不能在路由参数中添加实例类型。如果你想传递对象,你将不得不做一些变通。请看下面我的建议:

方法一: 在路由参数中单独传递 class 的所有字段。例如假设 classes 是-

public class Model1
{
    public int MyProperty { get; set; }
    public string MyProperty1 { get; set; }
}

public class Model2
{
    public int MyProperty2 { get; set; }
    public string MyProperty3 { get; set; }
}

您的 ActionLink 应该是:

@Html.ActionLink("Text", "SetSpot", "EmsUser",
new {
    MyProperty = 1,
    MyProperty1 = "Some Text",
    MyProperty2 = 2,
    MyProperty3 = "Some Text"
}, null)

方法二:

使用ajax调用,如图link