1

我正在尝试在我的 Site.Master 文件中呈现部分视图,但我不断收到错误消息(对象引用未设置为对象的实例)。如果我直接访问视图,我会得到我需要的信息,但如果我从 HomeController 访问索引视图,我会收到错误消息。局部视图将显示登录的用户、部门和角色。这是我的代码。

控制器文件夹 -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"); %>

用户控制器.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);
        }

    }

家庭控制器.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

您的控制器能够将单个模型传递给视图进行渲染。您是否考虑过创建父 ViewModel 类型,而不是尝试拥有两个模型,或者在使用 RenderAction 的请求中调用两个操作方法?

// 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 回答