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
我试图用 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