1

这是控制器:

public ActionResult Index()
{

   var result = from u in myContext.Users
             join g in myContext.Groups
             on u.gid equals g.id
             select new {
                 u.username,
                 g.name
             };

   return View(result );
}

这是视图

@model IEnumerable<eTravel1.Models.User>
...
@Html.DisplayNameFor(model => model.username)
@Html.DisplayNameFor(model => model.name)
..

返回的匿名数据在 View 中不兼容。如果有人可以提供一些建议,我真的很感激。谢谢

4

1 回答 1

3

您应该像这样创建一个 ViewModel 类:

public class UserViewModel{

    //class constructor
    public UserViewModel(String userName_p, String name_p){
         this.UserName = userName_p;
         this.Name = name_p;
    }

    //class attributes
    String UserName {get; set;}
    String Name {get; set;}
}

创建该类的对象:

var result = from u in myContext.Users
                 join g in myContext.Groups
                 on u.gid equals g.id
                 select new UserViewModel(
                     u.username,
                     g.name
                 );

最后,以同样的方式将此对象传递给您的视图:

//returning an IEnumerable<UserViewModel> data type
return View(result.AsEnumerable());

在您的视图中,您应该期望这种完全相同的数据类型:

//change the UserViewModel to your complete namespace!
@model IEnumerable<UserViewModel>

我强烈建议您阅读有关“ViewModel 最佳实践”的这个stackoverflow 问题。

希望能帮助到你!

于 2012-05-01T21:56:00.647 回答