【问题标题】:are strongly typed user control views not allowed asp.net mvc?不允许强类型的用户控件视图 asp.net mvc?
【发布时间】:2010-10-18 16:55:35
【问题描述】:

这是设置 - 我有一个列出产品的视图。在同一页面上,我有一个列出类别的用户控件视图。

我将产品列表传递给视图,如下所示:

return View(myProducts);

用户控件视图通过ViewData["Category"]获取它需要的数据

现在,如果我尝试使用这样的强类型用户控件视图:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<myData.Models.Category>>" %>

我收到此错误:

传入字典的模型项的类型为“System.Collections.Generic.List1[myData.Models.Product]' but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable1[myData.Models.Category]”。

用户控件视图似乎很混乱,因为我将“产品”列表传递给视图。因此,如果我像这样删除强类型:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>

一切正常。

那么,强类型的用户控件视图是不允许的吗?还是我只是做错了什么?

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    当您渲染局部视图时,使用 ViewData["Category"] 作为您传递给控件的模型。

    <% Html.RenderPartial( "MyUserControl", ViewData["Category"], ViewData ); %>
    

    【讨论】:

      【解决方案2】:

      A 类型的泛型列表不能分配给 B 类型的泛型列表(其中 B 派生自 A)。这是 .Net 中所有通用集合的一般规则。

      【讨论】:

      • 我认为问题在于他对局部视图使用与页面相同的模型。根据定义,它们应该是完全不同的模型,我认为他只需要使用一个签名,允许他将正确的模型传递给部分。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      相关资源
      最近更新 更多