所以我还是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>
这就是现在显示的内容
我想要的是显示实际名称而不是MovieEmployee的ID。
如何正确实现此功能,以便Index显示员工的姓名而非他们的ID?
这是我的数据库图,显示了我的Movies数据库中的Employee.Name和MovieEmployees.ID
非常感谢!!
答案 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.NET,Pluralsight,MVCMusicStore Code和Rob Conery's spin on Music Store了解有关MVC的更多信息。 Rob Conery,Scott Hanselman,Jon Galloway,Phil Haack,Scott Guthrie,Brad Wilson等人在MVC上都可以找到很多材料。