gpt4 book ai didi

c# - ASP.NET MVC : The model item passed into the dictionary is of type 'ClassA' , 但此字典需要类型为 'ClassA' 的模型项

转载 作者:太空宇宙 更新时间:2023-11-03 14:27:09 26 4
gpt4 key购买 nike

我在使用 Html.RenderPartial 方法时遇到了一个特殊的异常。 ASP.NET MVC 似乎无法将 ClassA 类型的对象转换为 ClassA 类型的对象。我想知道是否有人知道发生了什么。

这里有更多的背景信息。我有以下层次结构:

public interface IInterface
{
string Name { get; }
}

public class ClassA : IInterface
{
public string Name
{
get
{
return "ClassA ";
}
}
}

在 View 中使用这两个:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<IEnumerable<IInterface>>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">

<% foreach (IInterface item in Model)
{
Html.RenderPartial(string.Concat(item.Name, "UserControl"), item);
}
%>

</asp:Content>

并且有一个名为 ClassAUserControl 的 UserControl,带有这个 header :

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

编辑:TypeHelpers.IsCompatibleObject(Object value) 决定这两种类型是不同的:

public static bool IsCompatibleObject<T>(object value)
{
return ((value is T) || ((value == null) && TypeAllowsNullValue(typeof(T))));
}

在上面的例子中,T 是 ClassA,值的类型是 ClassA。这真的让我想知道为什么“值(value)是 T”失败了......

最佳答案

您的用户控件需要一个 ClassA 对象,而您却给它一个 IInterface 对象。他不能将它向下转换为对象 A,因为他不知道它是 A 类。您可能会使用反射来重铸 IInterface 以取回您的 ClassA 类型,但这太丑陋了,我不想考虑再过一秒钟...

关于c# - ASP.NET MVC : The model item passed into the dictionary is of type 'ClassA' , 但此字典需要类型为 'ClassA' 的模型项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3615646/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com