【问题标题】:Access Array declared in C# Controller in Razor在 Razor 的 C# 控制器中声明的访问数组
【发布时间】: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


【解决方案1】:

转换为数组:

((string[,])Session["Things"]).GetLength(0)

【讨论】:

    猜你喜欢
    • 2014-04-10
    • 2018-01-06
    • 1970-01-01
    • 2018-01-21
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-20
    相关资源
    最近更新 更多