передать анонимный тип моему представлению ASP.NET MVC - PullRequest
1 голос
/ 22 марта 2012

У меня проблема, у меня следующий контроллер

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

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

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

Ответы [ 2 ]

3 голосов
/ 22 марта 2012

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

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>
}
1 голос
/ 22 марта 2012

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

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

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

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>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...