使用数组作为MVC模型中的数据类型

时间:2013-04-25 16:38:52

标签: asp.net-mvc-3 entity-framework

我正在为自己创建一个项目管理器应用程序作为学习体验。我正在使用ASP.NET MVC3,并将使用jQuery进一步下线。现在我使用Ninject / Moq创建了模型和一些模拟存储库。

型号:

public class Project
{
    public int ProjectID { get; set; }

    public string ProjectName { get; set; }

    public string Description { get; set; }

    public string[] AssignedEmployees { get; set; }

    public string[] ProjectGoals { get; set; }

    public DateTime ProjectStart { get; set; }

    public DateTime ProjectDeadLine { get; set; }

    public string Notes { get; set; }
}

模拟存储库:

Mock<IProjectRepository> projectMock = new Mock<IProjectRepository>();
        projectMock.Setup(m => m.Projects).Returns(new List<Project> 
        {
            new Project {ProjectID = 1234, ProjectName = "Email redesign", Description = "New email", AssignedEmployees = new string[] {"Ian", "Danny", "Mikey"}},
            new Project {ProjectID = 4321, ProjectName = "Update Cart", Description = "Make cart smoother function better"},
            new Project {ProjectID = 4567, ProjectName = "New social widget", Description = "More social media buttons"}
        }.AsQueryable());

        ninjectKernel.Bind<IProjectRepository>().ToConstant(projectMock.Object);

查看:

@foreach  (var p in Model){
<div class='project'>
    <h3>@p.ProjectName</h3>
    <p>@p.Description</p>
    <ul class='assigned-employees'>
        <li class="employee">
        @p.AssignedEmployees
        </li>
    </ul>
</div>
}

问题是在AssignedEmployees数组的视图中呈现的所有内容都是System.String[]。我尝试了.ToString.ToArray,我尝试使用foreach循环遍历数组中的每个项目,将它们分别打印到单独的li中。

如何让它打印出阵列中的所有名字?是否使用阵列甚至是最佳解决方案?我希望任何使用该应用程序的人都可以为项目分配尽可能多的员工,这就是为什么我认为数组可能是最好的。

1 个答案:

答案 0 :(得分:2)

您应该能够使用foreach循环或for循环。调用.ToString()只是打印System.String[]并且在数组上调用.ToArray()不会做任何事情

<ul class='assigned-employees'>
   @{foreach(var emp in p.AssignedEmployees){
       <li class="employee">@emp</li>
  }}
</ul>

<ul class='assigned-employees'>
   @{for(var i = 0; i<p.AssignedEmployees.Count(); i++){
       <li class="employee">@p.AssignedEmployees[i]</li>
  }}
</ul>

此外,我希望您在尝试枚举之前检查数组是否存在,否则您将获得运行时异常

<ul class='assigned-employees'>
   @{if(p.AssignedEmployees != null && p.AssignedEmployes.Any()){
     foreach(var emp in p.AssignedEmployees){
       <li class="employee">@emp</li>
     }
  }}
</ul>