Ich habe diesen nervigen Fehler in einigen meiner Builds.
Es gibt keinen Fehler im Projekt, denn wenn ich erneut erstelle, verschwindet das Problem. Die Meldung wird nur angezeigt, wenn die Site auf einem Windows 2008-Server bereitgestellt wird.
Ich dachte zuerst, dass es ein Problem mit temporären Dateien sein könnte, aber das ist nicht der Fall. Ich habe den Build in einem anderen Web bereitgestellt und der Fehler wird weiterhin angezeigt.
Der Fehler tritt bei zufälligen Aktionen der Site auf. Die meisten Builds sind in Ordnung, aber jeder 3. oder 4. Build führt zu Laufzeitfehlern.
Ich erstelle mit einem WebdeploymentProject im Release-Modus. Ansichten werden vorkompiliert.
Es ist nicht in ASP.NET MVC ich einen falschen Typen Fehler auftreten , wenn eine Seite mit der richtigen typisierten Objekt - Rendering , weil Ansichten völlig unterschiedliche Namen haben.
Wie kann ich dieses Problem beheben oder wie kann ich Hilfe dafür erhalten?
Hier ist mein WebDeploymentProject
<!--
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>
BEARBEITEN
Nach einigen Monaten verschwand dieses Problem. Ich habe seit über 1 Jahr keine Probleme mehr. Ich denke, das Problem wird erneut auftreten, wenn niemand damit rechnet.
BEARBEITEN 2
… Seit über 2 Jahren. Ich bin so ein Glückspilz!
BEARBEITEN 3
Ich habe gerade einen Artikel über MSDN gelesen und es klingt nach dem Problem, das ich hatte. Ich habe das Debuggen deaktiviert, aber die Kompilierung war "manchmal falsch". Das Verhalten des alten Anbieters könnte das Problem sein. Aber das ist nur eine Vermutung.
Sehr große Seiten mit langen HTML-Bereichen ohne Serverblöcke (z. B. <% =%>) können einen Stapelüberlauf verursachen, wenn die Debug-Kompilierung aktiviert ist, die die Anwendung zum Absturz bringt. Beachten Sie, dass in unseren Tests eine Seite verwendet wurde, die ~ 4x so groß ist, dass beim alten Anbieter ein ähnliches Problem aufgetreten wäre. In diesem Fall stürzt jedoch die gesamte Anwendung ab, während beim alten Anbieter die fehlerhafte Seite nur fehlschlägt
quelle
Antworten:
Selbst wenn die Typen übereinstimmen, kann dieser Fehler auftreten, wenn eine Null an eine Teilansicht übergeben wird.
Sie können dies beheben, indem Sie
RenderPartial
mit einem LeerzeichenViewDataDictionary
wie folgt anrufen :helper.RenderPartial("~/Views/Player/PlayerName.ascx", player, new ViewDataDictionary());
Als Referenz fand ich diese Lösung unter:
renderpartial mit Nullmodell wird vom falschen Typ übergeben
quelle
ASP.NET MVC Partials
NULL Modell wurde bestanden !!!
@Html.Partial("PartialView", model: Model)
quelle
Dieser Fehler kann auftreten (und tritt auf), wenn zwischen den Daten, die die Controller-Aktionsmethode an die Ansicht liefert, und dem von der Ansicht erwarteten Datentyp eine Nichtübereinstimmung besteht. Dies wird normalerweise nicht als Erstellungsfehler angezeigt, selbst bei vorkompilierten Ansichten.
Zum Beispiel, wenn ich eine Methode habe ...
public ActionResult Create() { // Do something return View(new CustomerCreateViewModel()); }
... und eine Ansicht mit einem Seitenattribut erstellen ...
<%@ Page ... Inherits="System.Web.Mvc.ViewPage<CustomerDetailsViewModel>" %>
... dies wird ohne Fehler kompiliert und erstellt. Wenn ich jedoch die Aktion "Erstellen" aufrufe, wird ein gelber Bildschirm angezeigt, da die Aktionsmethode "Erstellen" Daten eines Typs auslöst und die Ansicht Daten eines anderen Typs erwartet. Vielleicht möchten Sie überprüfen, ob Ihre Typen übereinstimmen ...
quelle
Sind Sie absolut sicher, dass dies nichts mit den Daten zu tun hat, die an die Ansicht übergeben werden? Führen Sie jedes Mal einen vollständigen Umbau durch?
Diese Fehler treten normalerweise auf, weil eine Teilansicht versucht, das an ViewPage übergebene Ansichtsmodell zu verwenden, wenn das an die Teilansicht übergebene Ansichtsmodell null ist. Mir ist klar, dass Sie implizieren, dass der Fehler irgendwie durch den Erstellungsprozess verursacht wird, aber ich sehe nicht, wie das möglich wäre. Könnte es sein, dass die bereitgestellte Site eine andere Datenbank verwendet als die Site, die Sie auf Ihrem Entwicklungscomputer ausführen, und könnten die Daten (oder der Mangel an Daten) in dieser Datenbank die Ursache des Problems sein?
quelle
Löst der Build überhaupt Warnungen oder Fehler aus?
Haben Sie Ihre Abhängigkeiten richtig eingerichtet? Z.B. Ansichten je nach Modell. Erstellen Sie anhand der angegebenen Abhängigkeiten heraus, in welcher Reihenfolge die Dinge kompiliert werden sollen. Z.B. Wenn Sie ein Modell ändern und die Ansicht vor dem Modell kompiliert wird, treten Probleme auf ...
Verschwindet dies, wenn Sie keine Ansichten kompilieren?
Erben Ihre Ansichten auch
System.Web.Mvc.ViewPage
oderSystem.Web.Mvc.ViewPage<T>
wo ist T Ihr Modell?quelle
Bevor Sie das Modell aus Ihrer Sicht der Benutzersteuerung zuweisen, instanziieren Sie dieses bestimmte Objekt im Konstruktor des Modells / der Entität.
Beispiel:
public class MainEntity { public SubEntity AssociatedEntity; public MainEntity() { // This is where the instantiation happen. AssociatedEntity = new SubEntity(); } } public class SubEntity { public string property1; }
Ihre Ansichtsseite:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MyNamespace.Models.MainEntity>" %> .... <%Html.RenderPartial("ucMyUserControl",Model.AssociatedEntity); ....
Ihre Benutzersteuerung:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyNamespace.Models.SubEntity>" %> .... <%Html.TextBoxFor(m=>m.Property1);
quelle
Wenn Sie einen überschreibenden Ansichtsordner haben , in dem mehrere Partials mit demselben Namen vorhanden sind (eine überschreibt eine andere mit demselben Namen), müssen Sie den Modelltyp in jeder Ansicht aktualisieren, da sonst möglicherweise dieser Fehler angezeigt wird.
quelle
Ich hatte die folgende Fehlermeldung
mit dem folgenden Code
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);
und ich habe keine Ahnung, was der Typ war
Trotzdem verschwindet der Fehler, wenn ich
.ToList()
am Ende ein hinzufügeIEnumerable<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);
Hoffe es hilft jemand anderem
quelle
Für mich wurde dies durch einen dummen Fehler beim Ausschneiden und Einfügen in meinem Kontext verursacht. Ich habe diesen Fehler in meinem Kontaktindex erhalten.
public DbSet<Customer> Customer { get; set; } public DbSet<Customer> Contact { get; set; } // Note this ^^^^^^^^ should have been Contact
Es wurde in Ordnung kompiliert, gab mir aber den Fehler beim Rendern der Ansicht.
(Fügen Sie dies als etwas anderes für zukünftige Leute hinzu, die nach Lösungen suchen, um es zu versuchen.)
quelle
Ich habe diesen Fehler bei der Verwendung von Episerver erhalten. Ich habe einfach die return-Anweisung im Controller von geändert
return View();
zu
return PartialView();
quelle