如何将存储过程结果从MVC Controller发送到View

时间:2017-11-09 04:50:23

标签: c# asp.net-mvc stored-procedures

我正在尝试从存储过程中获取课程和作业。使用结果填充我的ViewModel,并在视图中显示它们,并在其路线下显示每个课程的所有分配。存储过程返回项目列表。我得到一个Null引用异常。

我的控制器代码:

var CourseNames = storedProcedure.getCourseNames(User.Identity.Name);

    var CoursesView = new CoursesViewModel();

    foreach (var CourseName in CourseNames)
    {
        CoursesView.CourseNames.Add(CourseName);
        var AssignmentNames = storedProcedure.getAssignmentNames(User.Identity.Name, CourseName);
        foreach (var AssignmentName in AssignmentNames)
        {
            CoursesView.AssignmentNames.Add(AssignmentName);
        }
    }

    return View(CoursesView);

CoursesView.CourseNames.Add(CourseName);出错线

我的ViewModel代码:

public class CoursesViewModel
    {
        public List<string> CourseNames { get; set; }       
        public List<string> AssignmentNames { get; set; }
    }

我的观看代码:

<table>
    @foreach (var item in Model)
        {
            <tr><th>@Model.CourseNames</th></tr>
            <tr><td>@Model.AssignmentNames</td></tr>
        }
</table>

1 个答案:

答案 0 :(得分:0)

假设您为了简洁而没有缩减代码,我相信问题是您的CoursesViewModel类没有初始化List属性,因此当您在其中任何一个上调用Add时,您就会#39 ; ll得到NullReferenceException。

以下是我将如何修复它(虽然您可以将初始化移动到控制器中,如果您选择的话):

public class CoursesViewModel
{
    public List<string> CourseNames { get; set; }       
    public List<string> AssignmentNames { get; set; }

    public CoursesViewModel()
    {
        CourseNames = new List<string>();
        AssignmentNames = new List<string>();
    }
}