我是否可以在强类型视图中渲染强类型部分?
当我尝试:
时,我收到以下错误传递到字典中的模型项是类型的 'System.Data.Linq.Table
1[UI.Models.vwProject]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1 [UI.Models.ProjectStatus]'。
我使用ViewData.Model填充两个视图
public ActionResult Index()
{
ViewData.Model = project.vw_Projects;
return View();
}
public ActionResult ProjectStatus()
{
ViewData.Model = project.ProjectStatus;
return View();
}
这是我的观点:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<UI.Models.vwProject>>" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<div>
<table>
<tr>
<th>
Project
</th>
<th>
Hours
</th>
</tr>
<tr>
<td>
<%= Html.Encode(item.ProjectCode) %>
</td>
<td>
<%= Html.Encode(item.ProjectHours) %>
</td>
</tr>
<div>
<% Html.RenderPartial("ProjectStatus"); %>
</div>
</asp:Content>
这是我的部分内容:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<UI.Models.ProjectStatus>>" %>
<table>
<tr>
<th>
Code
</th>
<th>
Status
</th>
</tr>
<% foreach (var item in Model) { %>
<tr>
<td>
<%= Html.Encode(item.ProjectCode) %>
</td>
<td>
<%= Html.Encode(item.ProjectStatus) %>
</td>
</tr>
<% } %>
</table>
我对如何在强类型或动态视图中显示强类型/动态部分感到困惑。有人可以帮我解决这个问题吗?
答案 0 :(得分:2)
是的,你可以。但是如果你没有将模型传递给RenderPartial,它将使用视图中的模型。 所以,你需要做那样的事情:
Html.RenderPartial("ProjectStatus", new List<ProjectStatus>()); %>
答案 1 :(得分:1)
如果你渲染一个部分,它就不会命中你的控制器动作,只是在默认情况下使用partent的视图模型渲染视图。
如果您想调用控制器操作ProjectStatus
,那么您需要的是RenderAction方法:
<% Html.RenderAction("ProjectStatus"); %>
关于When to use RenderAction vs RenderPartial with ASP.NET MVC
的好文章