Site.Master中的MVC部分视图

时间:2011-12-05 15:52:25

标签: asp.net-mvc asp.net-mvc-partialview

我正在尝试在我的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"); %>

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需要一个不同的模型,那么我如何将2个模型传递给View?

任何想法我做错了什么?我现在还在学习MVC,所以我对此并不擅长。任何帮助,将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:2)

调用RenderPartial直接渲染视图,继承父模型。

您应该调用RenderAction来呈现子操作,以便操作可以将正确的模型传递给局部视图。

答案 1 :(得分:0)

您的Controller可以将单个模型传递给View进行渲染。您是否考虑过创建父ViewModel类型,而不是尝试拥有两个模型,或者在使用RenderAction的请求中调用两个Action方法?

// 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); %>