0

在我的视图模型中,我有 4 个 IEnumberable 属性需要输出到表中。

每个属性对应于表中的一列。如果您仔细观察,一些单元格包含多个值。在我的剃刀视图中输出什么是理想的?

到目前为止,我还没有在 asp.net mvc 中使用过助手等。该表比直接的 @for 循环需要更多的逻辑。

这是我的视图模型的样子

public class FactViewModel
{
    public int AssessmentID { get; set; }
    public IEnumerable<MobilityScore> MobilityScores { get; set; }
    public IEnumerable<SocialScore> SocialScores { get; set; }
    public IEnumerable<FunctionScore> FunctionScores { get; set; }
    public IEnumerable<CognitionScore> CognitionScores { get; set; }
}

*这些 IEnumberable 属性中的每一个都具有相同的字段:id、value、label。

在此处输入图像描述

4

2 回答 2

0

您可以添加另一个属性到您FactViewModel的组合所有分数并适当地排序它们。您需要每个分数类型都有一个共同的基本类型才能发生这种情况,例如Score.

public class FactViewModel
{
    public int AssessmentID { get; set; }
    public IEnumerable<MobilityScore> MobilityScores { get; set; }
    public IEnumerable<SocialScore> SocialScores { get; set; }
    public IEnumerable<FunctionScore> FunctionScores { get; set; }
    public IEnumerable<CognitionScore> CognitionScores { get; set; }
    public IENumerable<Score> Scores
    {
        get
        {
            var scores = new List<Score>();
            scores.Add(MobilityScores);
            scores.Add(SocialScores);
            scores.Add(FunctionScores);
            scores.Add(CognitionScores);
            return scores.OrderBy(e => e.Label);
        }
    }
}

这意味着您可以只使用剃须刀中的常规@foreach输出到您的表格。这隐藏了模型中的所有数据组织,而不是弄乱视图。

@foreach (var score in Model.Scores) {
    <tr>
        <td>@score.Id</td>
        <td>@score.Label</td>
        <td>@score.Value</td>
    </td>
}

如果您使用这种方法,请确保您子类化Score

class MobilityScore : Score { }
class SocialScore : Score { }
class FunctionScore : Score { }
class CognitionScore : Score { }

class Score 
{
    public int Id { get; set; }
    public string Label { get; set; }
    public string Value { get; set; }
}
于 2013-10-22T17:53:33.597 回答
0

集合中的每个元素如何相互关联?如果您对一个评估的每个组件都有多个项目,那么将每个集合中所有项目的串联对象在单元格中显示该项目是否有意义?每个集合中的项目如何相互关联?

我注意到您在每个评估 ID 的列中为每组项目设置了单选按钮,因此如果必须为某项选择 MobilityScore 中的一个特定元素,则更难将该组表示为一个串联项目。

考虑到 4 个集合中最大项目的计数,并且对于每个可枚举中的每个元素,您也可以(也许)摆脱跨越行高,然后迭代每个集合的最大计数并在没有的地方添加空 td 单元格.

于 2013-10-23T05:36:11.480 回答