1

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

コントローラー フォルダー -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.マスターコード:

   <% 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 行のコメントを外して、モデルをビューに渡すと、問題なく動作します。しかし、HomeController には別のモデルが必要になるため、2 つのモデルをビューに渡すにはどうすればよいでしょうか?

私が間違っていることはありますか?私はまだMVCを学んでいるので、これはあまり得意ではありません。どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

2

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

アクションが正しいモデルを部分ビューに渡すことができるように、代わりに呼び出しRenderActionて子アクションをレンダリングする必要があります。

于 2011-12-05T15:55:13.050 に答える
0

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

// 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.RenderPartial("LoginInfo", Model.UserInfo); %>
于 2011-12-05T16:01:18.567 に答える