如何通过差异类型的模型(取决于控制器中的返回)来查看?
这是我的控制器:
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>
如何在不为其他模型类型创建另一个视图的情况下处理此事情?谢谢,如果有人能帮助我,我会非常合适。您可能不需要将所有代码发布给我,只需要一些关键字或告诉我如何解决它。
答案 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 可以解析它。