我正在尝试在我的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,所以我对此并不擅长。任何帮助,将不胜感激。谢谢。
答案 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); %>