将匿名类型传递给我的ASP.NET MVC视图

时间:2012-03-22 09:34:44

标签: asp.net-mvc asp.net-mvc-3

我有问题,我有下一个控制器

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。我怎样做? (实际上不知道这个controllet是否正常),我想发送属于不同表的字段。我想将查询作为列表发送并显示在View,ViewBag中随身携带吗?如何将这些数据传递给视图并使用foreach显示?。

我用剃须刀

2 个答案:

答案 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>
}

编辑:

您可能希望定义 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 :(得分: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>

这只是视图中数据的基本显示,您可以使用第三方组件显示具有某些功能的数据。