ASP.NET MVC两个模型在ove视图中,代码更改

时间:2017-07-07 21:12:51

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

我有这个代码并且工作正常:

@model IEnumerable<Moviestore.Models.Movie>
@{
ViewBag.Title = "Index";
}

<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
    <th>
        @Html.DisplayNameFor(model => model.Title)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Genre)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Author)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Year)
    </th>
    <th></th>
</tr>

@foreach (var item in Model) {
if (item.IsDeleted == 0)
{
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.Title)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Genre)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Author)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Year)
    </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>

但是我需要添加一个模型,我用Tuple这样做了:

@using Moviestore.Models;
@model Tuple<Movie, User>

@{
ViewBag.Title = "Index";
}

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
    <th>           
        @Html.DisplayNameFor(tuple => tuple.Item1.Title)
    </th>
    <th>
        @Html.DisplayNameFor(tuple => tuple.Item1.Genre)
    </th>
    <th>
        @Html.DisplayNameFor(tuple => tuple.Item1.Author)
    </th>
    <th>
        @Html.DisplayNameFor(tuple => tuple.Item1.Year)
    </th>
    <th></th>
</tr>


@foreach (var item in Model) {
if (item.IsDeleted == 0)
{
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.Title)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Genre)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Author)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Year)
    </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>

但现在我对下半部分代码有疑问。 来自@foreach

我不知道我需要放什么代替@foreach(模型中的var项目)

然后@ Html.DisplayFor( modelItem =&gt; item.Title )也需要进行一些更改。

很抱歉很长的帖子,我试着尽可能地解释这个问题。

2 个答案:

答案 0 :(得分:1)

正如我在评论中提到的,处理这种情况的适当方法(在特定的View页面上需要多个模型)是使用包含所需模型的ViewModel(参见here for reference)。 / p>

要回答您的具体问题,您可以按其位置访问元组的每个项目,例如:如果您的模型是Tuple<Movie, User>,那么您可以通过model.Item1访问Movie对象,通过model.Item2等访问User对象。

但我强烈建议您采用我链接的ViewModel方法。

答案 1 :(得分:0)

您好,这是您的要求的viewmodel:

public class MovieUserViewModel
{
    public IEnumerable<Movie> Movie { get; set; }
    public IEnumerable<Users> Users { get; set; }
}

使用上面的viewmodel,您可以轻松访问每个类

@foreach (var item in Model.Movie)

@foreach (var item in Model.Users)

其他信息:Understanding ViewModel in ASP.NET MVC

由于

KARTHIK