【发布时间】:2019-01-07 16:36:09
【问题描述】:
我在 MVC 控制器中声明了一个 2D 数组,我需要通过 Razor 访问它,以便循环遍历每个值。
我创建了一个会话并将其设置为数组,但我不知道如何通过 razor 访问数组。
控制器:
string[,] Things = new string[,] {
{ "thing1", "pie" },
{ "thing1", "cake" },
{ "thing1", "potato" }
};
public void GetThings()
{
Session["Things"] = Things;
}
public ActionResult Index()
{
GetThings();
return View();
}
剃须刀:
@{
for (int i = 0; i < Session["Things"].GetLength(0); i++)
{
@i
}
}
我收到错误“'object'不包含Getlength的定义,唯一建议的操作是.Equals、.GetHashCode、.GetType和.ToString。
如果我在 razor 中声明数组,将“Session...”替换为数组变量名,那么剃刀中的上述 c# 就可以工作。
我无法从数组会话中读取任何值以显示在 HTML 前端,在浏览器中执行 @Session["Things"] 显示 System.String[,](但这与我尝试调用在 razor 中声明的数组相同), @Session["Things"][1,1] 给出浏览器错误
无法将带有 [] 的索引应用于“对象”类型的表达式
【问题讨论】:
-
Session 持有
objects 不是强类型,因此出现错误“无法使用 [] 将索引应用于“对象”类型的表达式” -
你为什么要为此使用会话?
-
@ErikPhilips 我选择使用会话,因为该数组需要在多个地方使用,而不仅仅是在剃须刀前端,例如控制器中的其他函数并通过获取 JS 调用(如JSON),我不想在多个地方重复这个数组。这种方式意味着我有一个需要管理的主列表,并且想不出更好的方法来声明一次数组并让所有需要它的区域都可以访问它。如果有更好的方法请告诉我:)
标签: c# arrays razor multidimensional-array