codememo

사전에 전달된 모델 항목의 유형은 'mvc'입니다.Models.ModelA'이지만 이 사전에는 'mvc' 유형의 모델 항목이 필요합니다.모델.모델 B'

tipmemo 2023. 7. 13. 00:35
반응형

사전에 전달된 모델 항목의 유형은 'mvc'입니다.Models.ModelA'이지만 이 사전에는 'mvc' 유형의 모델 항목이 필요합니다.모델.모델 B'

저는 제 빌드 중 몇 가지에서 짜증나는 실수를 했습니다.

프로젝트에는 오류가 없습니다. 다시 빌드하면 문제가 사라지기 때문입니다.이 메시지는 사이트가 윈도우즈 2008 서버에 배포된 경우에만 나타납니다.

저는 처음에 임시 파일의 문제일 것이라고 생각했지만, 그렇지 않습니다.빌드를 다른 웹에 배포했는데 오류가 여전히 나타납니다.

사이트의 임의 작업에 오류가 나타납니다.대부분의 시간 빌드는 정상이지만 각 3번째 또는 4번째 빌드는 런타임 오류를 생성합니다.

릴리스 모드에서 웹 배포 프로젝트를 사용하여 빌드합니다.보기가 미리 컴파일됩니다.

In ASP.NET MVC가 아닙니다. 올바른 형식의 개체로 페이지를 렌더링할잘못된 형식 오류가 발생합니다. 보기의 이름이 완전히 다르기 때문입니다.

이 문제를 디버그하거나 이 문제에 대한 도움말을 보려면 어떻게 해야 합니까?

웹 배포 프로젝트입니다.

    <!-- 
      Microsoft Visual Studio 2008 Web Deployment Project 
      http://go.microsoft.com/fwlink/?LinkID=104956

    -->
    <Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
        <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
        <ProductVersion>9.0.21022</ProductVersion>
        <SchemaVersion>2.0</SchemaVersion>
        <ProjectGuid>{E5E14CEB-0BCD-4203-9A5A-34ABA9C717EA}</ProjectGuid>
        <SourceWebPhysicalPath>..\B2CWeb</SourceWebPhysicalPath>
        <SourceWebProject>{3E632DB6-6DB3-4BD0-8CCA-12DE67165B48}|B2CWeb\B2CWeb.csproj</SourceWebProject>
        <SourceWebVirtualPath>/B2CWeb.csproj</SourceWebVirtualPath>
        <TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
      </PropertyGroup>
      <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
        <DebugSymbols>true</DebugSymbols>
        <OutputPath>.\Debug</OutputPath>
        <EnableUpdateable>false</EnableUpdateable>
        <UseMerge>true</UseMerge>
        <SingleAssemblyName>B2CWeb_Build</SingleAssemblyName>
      </PropertyGroup>
      <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
        <DebugSymbols>false</DebugSymbols>
        <OutputPath>..\B2CWeb_Deploy\</OutputPath>
        <EnableUpdateable>false</EnableUpdateable>
        <UseMerge>true</UseMerge>
        <SingleAssemblyName>B2C_Web</SingleAssemblyName>
        <ContentAssemblyName>
        </ContentAssemblyName>
        <DeleteAppCodeCompiledFiles>false</DeleteAppCodeCompiledFiles>
      </PropertyGroup>
      <ItemGroup>
      </ItemGroup>
      <Import Project="$(MSBuildExtensionsPath)\Microsoft\WebDeployment\v9.0\Microsoft.WebDeployment.targets" />
      <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
           Other similar extension points exist, see Microsoft.WebDeployment.targets.
      <Target Name="BeforeBuild">
      </Target>
      <Target Name="BeforeMerge">
      </Target>
      <Target Name="AfterMerge">
      </Target>
      <Target Name="AfterBuild">
      </Target>
      -->
    </Project>

편집

몇 달 후에 이 문제는 사라졌습니다.저는 지금까지 1년 넘게 문제가 없었습니다.아무도 예상하지 못했을 때 이슈가 다시 불거질 것 같습니다.

편집 2

2년이 넘었습니다.나는 정말 운이 좋은 녀석입니다!

EDIT 3

방금 MSDN에 관한 기사를 읽었는데, 제가 겪었던 문제처럼 들립니다.디버깅을 비활성화했지만 컴파일이 "가끔 잘못되기도" 했습니다.이전 공급자의 행동이 문제가 될 수 있습니다.하지만 이건 추측일 뿐입니다.

서버 블록이 없는 긴 HTML 범위를 포함하는 매우 큰 페이지(예: <%= %>)는 디버그 컴파일이 사용 가능할 때 스택 오버플로를 발생시켜 응용 프로그램을 손상시킬 수 있습니다.이 테스트에서는 이전 프로바이더에서 유사한 문제가 발생할 수 있는 페이지의 최대 4배에 달하는 페이지가 생성되었지만, 이 경우에는 전체 애플리케이션이 충돌하는 반면 이전 프로바이더에서는 문제가 되는 페이지가 실패합니다.

유형이 일치하더라도 null이 부분 보기로 전달될 때 이 오류가 발생할 수 있습니다.

전화로 이 문제를 해결할 수 있습니다.RenderPartial 털리로ViewDataDictionary다음과 같이:

helper.RenderPartial("~/Views/Player/PlayerName.ascx", player, new ViewDataDictionary());

참고로 이 솔루션은 다음 사이트에서 찾았습니다.
의 null을 했습니다.

ASP.NET MVC 부분

NULL 모델이 통과되었습니다!!!

@Html.Partial("PartialView", model: Model)

이 오류는 컨트롤러 작업 방법이 보기에 제공하는 데이터와 보기가 예상하는 데이터 유형이 일치하지 않을 때 발생할 수 있습니다.이는 일반적으로 사전 컴파일된 보기에서도 빌드 오류로 표시되지 않습니다.

예를 들어, 내게 방법이 있다면,

public ActionResult Create()
{
    // Do something
    return View(new CustomerCreateViewModel());
}

...그리고 페이지 특성이 있는 보기 만들기...

<%@ Page ... Inherits="System.Web.Mvc.ViewPage<CustomerDetailsViewModel>" %>

...이것은 오류 없이 컴파일되고 빌드될 것입니다.그러나 만들기 작업을 호출하면 노란색 화면이 나타납니다. 만들기 작업 방법은 한 유형의 데이터를 던지고 보기는 다른 유형의 데이터를 예상하기 때문입니다.유형이 일치하는지 확인할 수 있습니다.

이것이 보기로 전달되는 데이터와 전혀 관련이 없다고 확신하십니까?매번 전체 재구성을 수행하고 있습니까?

이러한 오류는 일반적으로 부분 뷰에 전달된 뷰 모델이 null인 경우 부분 뷰가 ViewPage에 전달된 뷰 모델을 사용하려고 하기 때문에 발생합니다.저는 당신이 어떻게든 빌드 프로세스에 의해 오류가 발생한다는 것을 암시하고 있다는 것을 알지만, 어떻게 그것이 가능한지 모르겠습니다.배포된 사이트가 개발 시스템에서 실행 중인 사이트와 다른 데이터베이스를 사용하고 있으며 해당 데이터베이스의 데이터(또는 데이터 부족)가 문제의 원인일 수 있습니까?

빌드가 경고 또는 오류를 트리거합니까?

종속성을 올바르게 설정했습니까?예: 모델에 따른 뷰지정된 종속성을 확인하여 어떤 순서로 컴파일할 것인지 파악합니다.예를 들어 모델을 변경한 경우 문제가 발생하기 전에 뷰가 컴파일된 경우...

보기를 컴파일하지 않으면 이것이 사라집니까?

뷰는 또한보상다니합속를기를 합니다.System.Web.Mvc.ViewPage또는System.Web.Mvc.ViewPage<T>당신의 모델 T는 어디에 있습니까?

뷰에서 사용자 컨트롤에 모델을 할당하기 전에 모델/엔티티의 생성자에서 해당 개체를 인스턴스화합니다.

예:

 public class MainEntity
 {
    public SubEntity AssociatedEntity;

    public MainEntity()
    {
        // This is where the instantiation happen.
        AssociatedEntity = new SubEntity(); 
    }
 }

 public class SubEntity
 {
    public string property1;
 }

보기 페이지:

<%@ Page Title="" Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<MyNamespace.Models.MainEntity>" %>
....
<%Html.RenderPartial("ucMyUserControl",Model.AssociatedEntity);
....

사용자 컨트롤:

<%@ Control Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<MyNamespace.Models.SubEntity>" %>
....
<%Html.TextBoxFor(m=>m.Property1);

동일한 이름의 여러 부분(한 부분이 동일한 이름으로 다른 부분보다 우선함)이 존재하는 재정의된 뷰 폴더가 있는 경우 각 뷰에서 모델 유형을 업데이트해야 합니다. 그렇지 않으면 이 오류가 발생할 수 있습니다.

다음과 같은 오류 메시지가 표시되었습니다.

사전에 전달된 모델 항목의 유형은 'System'입니다.Linkq.숫자+여기서 목록 반복기2[내 프로젝트]를 선택합니다.모델 A, 나의 프로젝트.Models.B]', 그러나 이 사전에는 'System' 유형의 모델 항목이 필요합니다.컬렉션.포괄적인.목록 1[내 프로젝트].모델.B]'.

다음과 같은 코드로

IEnumerable<B> list_B;
...
IEnumerable<A> list_A = Repo.GetListOfType_A();
list_B = list_A.Select(x => new B { Number = x.Number, Name = x.Name });
...
return View(list_B);

그리고 나는 어떤 종류였는지 전혀 모릅니다.

시스템.Linq.열거형+여기서 목록 반복기2[내 프로젝트]를 선택합니다.모델 A, 나의 프로젝트.모델.B]

어쨌든, 내가 a를 추가하면 오류가 사라집니다..ToList()마지막에

IEnumerable<B> list_B;
...
IEnumerable<A>list_A = Repo.GetListOfType_A();
list_B = list_A.Select(x => new B { Number = x.Number, Name = x.Name }).ToList(); // here
...
return View(list_B);

다른 사람에게 도움이 되길 바랍니다.

저에게 이것은 제 맥락에서 어리석은 잘라내기와 붙여넣기 오류로 인해 발생했습니다.연락처 색인에서 이 오류가 발생했습니다.

    public DbSet<Customer> Customer { get; set; }
    public DbSet<Customer> Contact { get; set; }
    // Note this ^^^^^^^^ should have been Contact

컴파일은 잘 되었지만 뷰를 렌더링할 때 오류가 발생했습니다.

(이것을 미래에 시도할 솔루션을 찾는 사람들을 위한 다른 것으로 추가합니다.)

저는 Episerver를 사용하는 동안 이 오류가 발생했습니다.컨트롤러의 반품 명세서를 다음과 같이 변경했습니다. return View();

로.

return PartialView();

언급URL : https://stackoverflow.com/questions/2315129/the-model-item-passed-into-the-dictionary-is-of-type-mvc-models-modela-but-thi

반응형