2017-02-14 58 views
0

如何通過差異類型的模型(取決於在控制器中返回)來查看?如何在視圖中傳遞差異類型的模型?

這裏是我的控制器:

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); 
     } 
    } 

正如你所看到的,它可能會返回區別類型,以查看依賴於用戶管理或沒有。

這種觀點的名單分行的返回,而不是單一分行

@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

如果View不會改變,將繼續爲雙方用戶以及管理員完全相同那麼你唯一的問題是,View接受的集合,因此該解決方案是通過單一的對象也可作爲收藏: -

else 
{ 
    int id = db.Users.Find(Session["username"]).branch_id; 
    return View(db.Branches.Where(x => x.id == id)); 
} 

這確保了返回類型ID IEnumerable<T>,而不是一個單一的對象,因此您查看可以解析它。 OMG。

+1

OMG。你救了我的命。我已經搜索了3個多小時,沒有任何想法,只需5分鐘內解決。非常感謝你。 –