2012-03-22 2 views
1

У меня есть проблема, у меня есть следующий контроллерпередать анонимный тип на мой взгляд ASP.NET MVC

namespace RolesMVC3.Areas.Administrador.Controllers 
{ 
    [Authorize(Roles = "Adminr")] 
    public class HomeController : Controller 
    { 
     private BASEDATOSCJ_2Entities db = new BASEDATOSCJ_2Entities(); 
     public ActionResult Index() 
     { 
      string username = User.Identity.Name; 
      MembershipUser user = Membership.GetUser(username); 
      Guid key = (Guid)Membership.GetUser().ProviderUserKey; 

      var Universities = (from u in db.UNIVERSITy 
           join s in db.CAMPUS_UNIVERSITy on u.IdUniversity equals s.IdUniversity 
           join c in db.CIUDAD_CAMPUS on s.IdCiudadSede equals c.IdCiudadSede 
           join co in db.OFFICE on s.Idoffice equals co.Idoffice 
           join uxc in db.USERxOFFICE on co.Idoffice equals uxc.Idoffice 
           where uxc.UserId == key 
           select new { u.Name, namecity = c.Nombre, s.Idoffice}).ToList(); 
      return View(Universities); 
     } 

С помощью этого контроллера я просто хочу отправить Просмотр u.Name и s.Idoffice. Как я сделал? (на самом деле не знаю, хорошо ли этот контроллер), я хочу, чтобы поля были связаны с разными таблицами. Я хочу отправить запрос в виде списка и присутствовать в представлении ViewBag с ним ?, Как передать эти данные в представление и отобразить с помощью foreach ?.

Я использую бритву

+0

http: // stackoverflow.ком/вопросы/5120317/динамический анонимным типа-в-бритвы-причины-runtimebinderexception –

ответ

1

Я хотел бы использовать модель представления. Я научился не подвергать объекты своего объекта представлению, я скорее сопоставляю свой объект домена с моделью представления и возвращу эту модель представления в представление.

Отделите логику доступа к данным от логики просмотра. Вы можете поместить весь этот оператор в класс репозитория, а затем просто вызвать этот метод с контроллера.

Вот частичный вид модели, вы можете иметь дополнительные свойства, если вам нужно больше данных, которые будут отображаться:

public class UniversityViewModel 
{ 
    IEnumerable<University> Universities { get; set; } 
} 

университет Класс:

public class University 
{ 
    public string Name { get; set; } 
    public string Idoffice { get; set; } 
} 

В моем методе действия моего контроллера он будет выглядеть примерно так:

public ActionResult Index(int id) 
{ 
    UniversityViewModel viewModel = new UniversityViewModel 
    { 
      Universities = universityRepository.GetAll() 
    }; 

    return View(viewModel); 
} 

И, на мой взгляд, у меня будет наблюдение г:

<table> 

@foreach(University university in Model.Universities) 
{ 
    <tr> 
      <td>Name:</td> 
      <td>university.Name</td> 
    </tr> 
} 

</table> 

Это только основной дисплей данных в представлении, вы можете использовать 3 компоненты сторонних для отображения данных с некоторыми особенностями.

+0

благодарит друг У меня есть 'общественного класс университет { общественного строковое имя {получить; задавать; } public int Idoffice {get; задавать; } } ' теперь отображается: Не удается неявно преобразовать тип 'decimal' в 'int' Как преобразовать десятичный код в int? – CADAVID

+0

Где вы можете получить эту ошибку? Вы отлаживали весь свой код? Где-то у вас есть десятичное число, которое присваивается целому числу. Смотрите, можете ли вы его найти? –

3

Если вы измените следующую строку:

select new { u.Name, namecity = c.Nombre, s.Idoffice} 

К

select new { Name = u.Name, Idoffice = s.Idoffice } 

Это выбирает только два поля в списке. По вашему мнению вы можете сделать следующее:

@model List<dynamic> 


@foreach(dynamic d in Model) { 
    <p>@d.Name</p> 
    <p>@d.Idoffice</p> 
} 

Edit:

Вы можете определить ViewModel содержать данные.

public class MyViewModel { 
    string Name {get;set;} 
    string Idoffice {get;set;} 
} 

Теперь вы можете изменить select заявление следующим образом:

select new MyViewModel { Name = u.Name, Idoffice = s.Idoffice } 

и обновить файл Razor как таковой:

@model List<MyViewModel> 


@foreach(MyViewModel d in Model) { 
    <p>@d.Name</p> 
    <p>@d.Idoffice</p> 
} 
Смежные вопросы