将c#mvc中的多维对象发送到c#mvc视图,并呈现单个属性

将c#mvc中的多维对象发送到c#mvc视图,并呈现单个属性,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我不完全确定我对这个问题的标题的措辞是否正确,所以首先我要道歉 我遇到了一个问题,关于使用C#MVC控制器中的LINQ从数据库查询到视图的值(以及所述值的计数)。视图使用第一个值作为可见值,然后使用第二个值确定应用于第一个值的元素的CSS 例如,我有一个序列 1, 1, 1, 2, 2, 4, 5, 5, 5, 3, 3, 4, 4, 2, 2, 2 etc. 而这个的运行值是 3, 3, 3, 2, 2, 1, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3 etc. 每个值将在

我不完全确定我对这个问题的标题的措辞是否正确,所以首先我要道歉

我遇到了一个问题,关于使用C#MVC控制器中的LINQ从数据库查询到视图的值(以及所述值的计数)。视图使用第一个值作为可见值,然后使用第二个值确定应用于第一个值的元素的CSS

例如,我有一个序列

1, 1, 1, 2, 2, 4, 5, 5, 5, 3, 3, 4, 4, 2, 2, 2 etc.
而这个的运行值是

3, 3, 3, 2, 2, 1, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3 etc.
每个值将在单独的div中呈现,用于屏幕包装,但根据所述数字的运行情况,将对其进行着色,以反映出现的数字运行情况

<div style="float:left; background-color:red">1</div> //
<div style="float:left; background-color:red">1</div> // three the same = red
<div style="float:left; background-color:red">1</div> //
<div style="float:left; background-color:yellow">2</div> // two the same = yellow
<div style="float:left; background-color:yellow">2</div> //
<div style="float:left; background-color:green">4</div> // single instance = green
<div style="float:left; background-color:red">5</div> // etc.

etc.
视图只需打印出具有适当格式的每个数字:

@model NumberRunMachine.Models.NumberRunModel;
//traditional HTML header code, get to body
@foreach(var item in Model.RunOfNumbers)
{
    <div class="run-of-number-style-@item.countOfNumberRun">@item.number</div>
}
我的主要问题是如何最好地整理数字并一起运行计数以发送到视图,这样就可以根据需要渲染每对的各个方面?我研究过匿名对象、交错数组、多维数组、数组列表(显式使用ToList()等)——要么我没有正确地编写代码,要么就是没有任何intellisense帮助程序来显示哪一个允许视图中所需的粒度

我可以得到一个多维数组来发送值,但是视图不允许我提取单个值。最佳做法是什么?我错过了什么

编辑:添加模型以便人们获得完整的MVC:)


您可能遇到的问题是,您正在控制器上以模型的形式发送匿名对象,但视图需要一个特定的类
NumberRunMachine.Models.NumberRunModel

为了向视图发送数据,我可以想出3个备选方案:

1。使用ViewData发送附加数据以查看

您可以使用
ViewDataDictionary
向视图发送更多数据,以避免更改主模型。假设您有一个要发送到视图的
UserInfo
类:

控制器

看法

控制器

看法

看法

@模型动态
@对于(int i=0;i

如果您使用的MVC版本低于第3版,您可以查看以下帖子:

老实说,我没有想到这是个问题;我的模型如下所示:public class NumberRunModel:model{//我目前正在以多维数组的形式获取所有信息,但无法将其与public byte[,]runOfNumbers{get;set;}}分开。我更愿意更改传递信息的方法,而不是改变模型的性质;它更多的是关于数据传输的方法,因为我最终会将其他值传递给视图(如用户信息等)。为代码道歉;无法渲染:我明白了,这就是为什么要使用匿名类型。我将对我的答案作更多的编辑和更正;)谢谢,正如您所描述的,我最终使用了动态模型,它可以满足我的需要。
@model NumberRunMachine.Models.NumberRunModel;
//traditional HTML header code, get to body
@foreach(var item in Model.RunOfNumbers)
{
    <div class="run-of-number-style-@item.countOfNumberRun">@item.number</div>
}
.run-of-number-style-1
{
    background-color:green;
}
.run-of-number-style-2
{
    background-color:yellow;
}
.run-of-number-style-3
{
    background-color:red;
}
public class PageRunModel : Model
{
    // I am currently getting all information as a multidimensional array, but can't separate it out
    public byte[,] RunOfNumbers { get; set; }
}
public ActionResult getDataAndDisplay (int bar)
{
    //...
    ViewData["userInfo"] = userInfo;
    //...
    return View("numbers", "show", new NumberRunModel(){RunOfNumbers = runOfNumbers} )
}
@{
    UserInfo user = ViewData["userInfo"] as UserInfo;
}
<b>User name:</b> @user.Name
<!-- And so on... -->
public class DataDisplayViewModel
{
  public UserInfo User { set; get; }
  public byte[,] RunOfNumbers { set; get; }
}
public ActionResult getDataAndDisplay (int bar)
{
    //...
    return View("numbers", "show", new DataDisplayViewModel(){User = userInfo, RunOfNumbers = runOfNumbers});
}
@model DataDisplayViewModel

<!-- ... -->

@for (int i = 0; i < Model.RunOfNumbers.GetLength(0); i++)
{
    <div class="run-of-number-style-@Model.RunOfNumbers[i,0].ToString()">
        @Model.RunOfNumbers[i,1].ToString()
    </div>
}

<!-- ... -->

<b>User name:</b> @Model.User.Name
<!-- And so on... -->
public ActionResult getDataAndDisplay (int bar)
{
    //...
    return View("numbers", "show", new {User = userInfo, RunOfNumbers = runOfNumbers});
}
@model dynamic

<!-- ... -->

@for (int i = 0; i < Model.RunOfNumbers.GetLength(0); i++)
{
    <div class="run-of-number-style-@Model.RunOfNumbers[i,0].ToString()">
        @Model.RunOfNumbers[i,1].ToString()
    </div>
}

<!-- ... -->

<b>User name:</b> @Model.User.Name
<!-- And so on... -->