2011-12-05 14 views
1

Site.Masterファイルで部分的なビューをレンダリングしようとしていますが、オブジェクトのインスタンスにオブジェクト参照が設定されていないエラーが発生します。ビューに直接アクセスすると必要な情報が得られますが、HomeControllerからインデックスビューにアクセスするとエラーが発生します。部分ビューには、ログインしたユーザー、部署、および役割が表示されます。これは私のコードです。Site.MasterのMVC部分ビュー

コントローラフォルダ -HomeController.cs -UsersController.cs

Models 
-Repository Folder 
    - UersRepository.cs 
-Repository Interface Folder 
    - IUsers.cs 
-Service Folder 
    - UsersService.cs 
    - IUserService.cs 
-Validation Folder 
    - IValidationDictionary 
    - ModelStateWrapper 

私は部分的にLoginInfo.ascxと呼ばれ、それが共有フォルダに位置してレンダリングしようとしているビュー。

LoginInfo.csコード:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Users>>" %> 

<%@ Import Namespace="TimeAttendanceMVC.Models"%> 




<table> 
    <tr> 
     <th> 
      UserName 
     </th> 
     <th> 
      Department 
     </th> 
     <th> 
      UserType 
     </th> 

    </tr> 

<% foreach (var item in Model) { %> 
    <tr> 
     <td> 
      <%: Html.DisplayFor(modelItem => item.UserName) %> 
     </td> 
     <td> 
      <%: Html.DisplayFor(modelItem => item.Department) %> 
     </td> 
     <td> 
      <%: Html.DisplayFor(modelItem => item.UserType) %> 
     </td> 

    </tr> 
<% } %> 

</table> 

Site.Masterコード:

<% Html.RenderPartial("LoginInfo"); %> 

UserController.cs

public class UsersController : Controller 
    { 
     // 
     private IUsersService _service; 

     //============================================================================== 
     //============================================================================== 
     public UsersController() 
     { 
      _service = new UsersService(new ModelStateWrapper(this.ModelState)); 
     } 

     public UsersController(IUsersService service) 
     { 
      _service = service; 
     } 

     //============================================================================== 
     //============================================================================== 
     // GET: /Employee/ 
     //============================================================================== 
     //============================================================================== 
     // GET: /Employee/ 
     public ActionResult Index() 
     { 

      var model = _service.Return_UserName_Dept(); 
      return View("LoginInfo", model); 
     } 

    } 

HomeController.cs

public ActionResult Index() 
     { 
      //var model = _service.Return_UserName_Dept(); 
      //return View(model); 
      return View(); 

     } 

上記のコードでは、エラーが発生します。私のHomeControllerで2行のコメントを外してモデルをViewに渡すと、正常に動作します。しかし、私のHomeControllerは別のモデルを必要とするので、Viewに2つのモデルをどのように渡しますか?

私が間違っていることは何ですか?私はまだMVCを今でも学んでいるので、これではうまくいきません。どんな助けもありがとう。ありがとう。

答えて

2

RenderPartialを呼び出すと、親モデルを継承してビューが直接レンダリングされます。

代わりにRenderActionに電話をかけて、アクションが正しいモデルを部分ビューに渡せるようにする必要があります。

+0

:よう

// This model is passed to your view for rendering public class MyViewModel { public string Title { get; set; } public DateTime Date { get; set; } // This property is passed as the model to your partial view public UserInfo UserInfo { get; set; } } public ActionResult Index() { var model = new MyViewModel(); // _service.GetIndexViewModel(); model.UserInfo = _service.Return_UserName_Dept();; return View(model); } 

は、その後、あなたのビューでは、あなたが何かをするだろう。<%Html.RenderAction( "LOGININFO"); %>が、別のエラーが発生しました:ハンドラ 'System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper'の子リクエストの実行中にエラーが発生しました。 – MikeB55

+0

問題を見つけるためにInnerExceptionを見てください。コントローラー名を指定するのを忘れたのかもしれません。 – SLaks

+0

InnerExceptionは次のように言っています:{"パブリックアクションメソッド 'LoginInfo'がコントローラ 'TimeAttendanceMVC.Controllers.HomeController'に見つかりませんでした。私はこれをどのように修正するか分からない。 HomeControllerにも新しいLoginInfoアクションを追加するはずですか?このアクションは、私のUsersControllerにあります。 – MikeB55

0

コントローラはレンダリングのために1つのモデルをビューに渡すことができます。 2つのモデルを用意しようとするのではなく、RenderActionでリクエスト内に2つのアクションメソッドを呼び出すのではなく、親のViewModelタイプを作成することを検討しましたか?私は次の私のコードを変更し

<% Html.RenderPartial("LoginInfo", Model.UserInfo); %> 
+0

Hmm。それを行う方法や親ViewModelが何であるかはわかりません。それでもまだ非常に新しいです。私は最初のMVCアプリケーションを開始しようとしています。 – MikeB55

+0

答えを更新しました。親ViewModelでは、コントローラがレンダリングのためにViewに渡す単一のモデルに、部分ビューのモデルとして機能する子プロパティが含まれていることを意味します。上記の場合、MyViewModelには、UserInfo部分に渡されるUserInfoプロパティが含まれています。お役に立てれば! –

+0

ありがとうございます。私はこれを試してみましょう。 – MikeB55

関連する問題