2017-02-14 14 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)); 
} 

Это обеспечивает ваш тип возвращаемого идентификатор IEnumerable<T> и ни одного объекта и, таким образом, ваш View можно разобрать его.

+1

OMG. Вы спасли мою жизнь. Я искал его более 3 часов без каких-либо идей, и вы просто решаете его не более 5 минут. Огромное спасибо. –