2012-03-22 10 views
1

に匿名型を渡す、私はちょうどビューu.Name、およびs.Idofficeに送信します。このコントローラでは、次のコントローラは私が問題を抱えている私の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); 
     } 

を持っています。私はどうしますか? (実際にこのコントロールレットがうまくいけばわかりません)、フィールドを別のテーブルに属したいと思っています。私はリストとしてクエリを送信し、Viewに表示するか、ViewBagと一緒に行きたいのですか?これらのデータをビューに渡してforeachで表示するにはどうすればいいですか?

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

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

これが唯一のリストに二つのフィールドを選択:

私はあなたが以下の行を変更した場合は、カミソリ

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

私の見解では、私はフォローインを持っていますG:

<table> 

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

</table> 

これは、ビュー内のデータのちょうど基本的な表示である、あなたはいくつかの機能を使用してデータを表示するには、サードパーティのコンポーネントを使用することができます。

+0

おかげで友人 私は 'パブリッククラス大学 { 公共の文字列の名前を持っている{取得します。セット; } public int Idoffice {get;セット; } } ' が表示されました:暗黙的に 'decimal'を 'int'に変換できません decimalをintに変換するにはどうすればよいですか? – CADAVID

+0

このエラーはどこにありますか?すべてのコードをデバッグしましたか?整数に割り当てられている小数点がどこかにあります。あなたがそれを見つけることができるかどうかを見ますか? –

3

を使用しています。あなたのビューでは、次の操作を実行できます。

@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> 
} 
関連する問題