如何在视图中传递差异类型的模型?

时间:2017-02-14 09:57:31

标签: asp.net view model controller asp.net-mvc-5

如何通过差异类型的模型(取决于控制器中的返回)来查看?

这是我的控制器:

    public ActionResult Index()
    {
        if (Session["username"] != null)
        {
            if (isAdmin(Session["username"].ToString()))
            {
                return View(db.Branches.ToList());
            }
            else
            {
                int id = db.Users.Find(Session["username"]).branch_id;
                return View(db.Branches.Find(id));
            }
        }
        else
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
    }

正如您所看到的,它可能会返回差异类型视图取决于用户是否为admin。

此视图仅用于返回List分支,而不是单个分支

@model IEnumerable<Inspinia_MVC5_SeedProject.Models.Branch>
<table class="table table-striped">
<tr>
    <th>
        @Html.DisplayNameFor(model => model.name)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.address)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.create_date)
    </th>
    <th></th>
</tr>
@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.name)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.address)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.create_date)
    </td>
    <td>
        @Html.ActionLink("Details", "Details", new { id=item.id }, new { @class = "btn btn-primary btn-sm"})
        @Html.ActionLink("Edit", "Edit", new { id=item.id }, new { @class = "btn btn-white btn-sm"})
        @Html.ActionLink("Delete", "Delete", new { id=item.id }, new { @class = "btn btn-white btn-sm"})
    </td>
</tr>
}
</table>

我试过这个,但是当我返回两种类型的模型时它才有用。不是我想要的东西。

 @model Tuple<IEnumerable<Inspinia_MVC5_SeedProject.Models.Branch>, Inspinia_MVC5_SeedProject.Models.Branch>

如何在不为其他模型类型创建另一个视图的情况下处理此事情?谢谢,如果有人能帮助我,我会非常合适。您可能不需要将所有代码发布给我,只需要一些关键字或告诉我如何解决它。

1 个答案:

答案 0 :(得分:0)

如果您的View不会改变,用户以及管理员将保持完全相同,那么您唯一的问题就是{ {1}}接受一个集合,因此解决方案也将单个对象也作为集合传递: -

View

这可确保您的返回类型为else { int id = db.Users.Find(Session["username"]).branch_id; return View(db.Branches.Where(x => x.id == id)); } ,而不是单个对象,因此 View 可以解析它。