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)
..

返された匿名データはビューで互換性がありません。誰かがアドバイスを与えることができれば、本当に感謝しています。ありがとう

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 に答える