是否可以使用ASP.NET MVC4中的一个控制器函数在视图中返回两个数组?

时间:2014-01-23 02:31:22

标签: javascript asp.net arrays json asp.net-mvc-4

这个问题实际上正在继续/扩展我的问题here

我有模型SchoolTestsPerModulePerStudent,实际上是以下

public partial class SchoolTestsPerModulePerStudent
{
    public long StudentID { get; set; }
    public long ModuleID { get; set; }
    public System.DateTime TestDate { get; set; }
    public int TestResult { get; set; }
}

正如我在上一个问题中所提到的,我将此代码作为控制器的功能

    var query = from b in db.SchoolTestsPerModulePerStudent
                where b.StudentID.Equals(2)
                select b;
        return View(query.ToArray());

那么,现在,b获得StudentID为2的学生的所有SchoolTestsPerModulePerStudent记录。

我现在遇到的问题是,我想在两个不同的数组中拆分b,我想在javascript中将其用作数组。

所以现在我有两个问题:

是否可以将包含SchoolTestsPerModulePerStudent记录的数组分解为两个可以在视图中返回的记录?更具体地说,我希望第一个只包含TestDate,而第二个只包含TestResult。我找不到任何可用于仅从其他表的列创建数组的选项...

第二个是我如何只使用一个函数返回这两个新数组?可能吗?基本上,我想要避免的是第二次执行查询(延迟),以及如果我执行两个查询来获取每个表的情况,有可能存在元素将是的情况返回使用不同的顺序,因此两个数组不匹配。

另外在javascript中,在我之前的问题中,我得到了作为数组返回的答案,它们应该像@Json.Encode(Model)那样以JSON形式返回。我可以在我的案例中使用@Json.Encode(TestDatesArray)@Json.Encode(TestResultsArray)吗?

1 个答案:

答案 0 :(得分:2)

吉姆,

通过创建另一个模型类,您可以毫无问题地执行此操作,并从查询结果中选择数据到数组。现在我按照你的说法假设你只希望两个属性TestDateTestResult没有特定的选择顺序而没有任何其他属性。

<强>型号:

public partial class SchoolTestResultsModel
{
    public int[] TestResults { get; set; }

    public DateTime[] TestDates { get;set; }
}

改编方法:

var query = from b in db.SchoolTestsPerModulePerStudent
            where b.StudentID.Equals(2)
            select b;

var model = new SchoolTestResultsModel();
model.TestDates = query.Select(x => x.TestDate).ToArray();
model.TestResults = query.Select(x => x.TestResult).ToArray();
return View(model);

然后您的JSON编码可以

@Json.Encode(Model.TestResults)
@Json.Encode(Model.TestDates)

现在确保您的视图已设置为使用新模型。

@model SchoolTestResultsModel