使用自定义SQL查询显示视图

时间:2014-05-20 14:33:39

标签: sql-server asp.net-mvc web-applications

所以我还是MVC和SQL的新手。 我想要做的是在电影的索引视图(即localhost / Movies /)上显示一个员工的姓名(Employee.Name)而不是他们的ID(MovieEmployees.ID)

我将我的数据库导入SQL Express,我为Movie创建了模型,然后为视图创建了一个自动生成控制器(创建,删除,详细信息,编辑和索引视图)

这是我目前的MovieController索引

 // GET: /Movies/
    public ActionResult Index()
    {
         return View(db.Movies.ToList());
    }

这是Index.cshtml

@model IEnumerable<WebApplication2.Entities.Movie>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.movieEmployeeID)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.showID)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.movieEmployeeID)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.showID)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
            @Html.ActionLink("Details", "Details", new { id=item.ID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.ID })
        </td>
    </tr>
}

</table>

这就是现在显示的内容 enter image description here

我想要的是显示实际名称而不是MovieEmployee的ID。

如何正确实现此功能,以便Index显示员工的姓名而非他们的ID?

这是我的数据库图,显示了我的Movies数据库中的Employee.Name和MovieEmployees.ID enter image description here

非常感谢!!

1 个答案:

答案 0 :(得分:0)

抱歉因为太早意外击中了保存。

创建如下的ViewModel:

 public class MovieViewModel
 {
      public int MovieId{get;set;} 
      public int ShowId{get;set;}
      public string EmployeeName{get;set;}
 }

然后在控制器中,

 // GET: /Movies/
 public ActionResult Index()
 {
     // the query can be better than this but just to get you started
     // you can also do db.MovieEmployees.Where and pass a predicate to filter results

     var model = db.MovieEmployees.Select(m=>new MovieViewModel{
                                    MovieId = m.Movie.ID,  
                                    ShowId= m.Movie.ShowId,
                                    EmployeeName = m.Employee.Name
                                  });

     return View(model);
 }

然后视图将是(试图保持简单),

  @model IEnumerable<MovieViewModel>
  @{
      ViewBag.Title = "Index";
  }
 <h2>Index</h2>
 <p>
     @Html.ActionLink("Create New", "Create")
 </p>
 <table class="table">
    <tr>
       <th>
           Employee Name
       </th>
       <th>
           Show ID
       </th>
       <th></th>
    </tr>
  @foreach (var item in Model) 
  {
    <tr>
      <td>
          @Html.DisplayFor(modelItem => item.EmployeeName)
      </td>
      <td>
          @Html.DisplayFor(modelItem => item.ShowID)
      </td>
      <td>
          @Html.ActionLink("Edit", "Edit", new { id=item.MovieId }) |
          @Html.ActionLink("Details", "Details", new { id=item.MovieId }) |
          @Html.ActionLink("Delete", "Delete", new { id=item.MovieId })
      </td>
   </tr>
  }
  </table>

因此,您使用viewModel向视图发送所需的属性,而不是其他任何内容。您可以从ASP.NETPluralsightMVCMusicStore CodeRob Conery's spin on Music Store了解有关MVC的更多信息。 Rob Conery,Scott Hanselman,Jon Galloway,Phil Haack,Scott Guthrie,Brad Wilson等人在MVC上都可以找到很多材料。