2013-04-02 50 views
1

我有一個通過數據庫優先導入生成的主/子關係模型。當我嘗試在同一頁面上輸出子數據時,我得到「System.Data.Entity.DynamicProxies ...」字符串顯示爲每個子行而不是數據。我認爲.NET MVC足夠聰明,可以識別子集合並自動輸出行數據(我最終將添加顯示/編輯格式化模板)。我能夠通過主視圖中的循環遍歷數據,所以數據在集合中,但嘗試DisplayFor子類顯示代理名稱或其他內容。任何人都知道發生了什麼?謝謝。視圖顯示「System.Data.Entity.DynamicProxies ...」而不是實際的子數據

生成的模型(額外字段省去爲了簡潔)如下:

namespace Test.Models 
{ 

    public partial class HCCB_CR 
    { 
     public HCCB_CR() 
     { 
      this.HCCB_CR_CONTACTS = new HashSet<HCCB_CR_CONTACT>(); 
     } 

     public string CCID { get; set; } 
     public virtual ICollection<HCCB_CR_CONTACT> HCCB_CR_CONTACTS { get; set; } 
    } 
} 

namespace Test.Models 
{ 
    public partial class HCCB_CR_CONTACT 
    { 
     public decimal ID { get; set; }  //key 
     public string CCID { get; set; } // foreign key to hccb_cr 

     public virtual HCCB_CR HCCB_CR { get; set; } 
    } 
} 

詳情生成腳手架(縮寫):

@model Test.Models.HCCB_CR 
@{ 
    ViewBag.Title = "Details"; 
} 

<h2>Details</h2> 

<fieldset> 
    <legend>HCCB_CR</legend> 

    <div class="display-label"> 
     @Html.DisplayNameFor(model => model.CCID) 
    </div> 
    <div class="display-field"> 
     @Html.DisplayFor(model => model.CCID) 
    </div> 

    <div class="display-field"> 
     @Html.DisplayFor(model => model.HCCB_CR_CONTACTS) 
    </div> 
</fieldset> 

輸出:

CCID 
HCCB-CR100290 
System.Data.Entity.DynamicProxies.HCCB_CR_585E5CAF66461CDD0DF7F83DACDFCA848E78470297E638B38AB0FFDC8CBD83DASystem.Data.Entity.DynamicProxies.HCCB_CR_585E5CAF66461CDD0DF7F83DACDFCA848E78470297E638B38AB0FFDC8CBD83DASystem.Data.Entity.DynamicProxies.HCCB_CR_585E5CAF66461CDD0DF7F83DACDFCA848E78470297E638B38AB0FFDC8CBD83DASystem.Data.Entity.DynamicProxies.HCCB_CR_585E5CAF66461CDD0DF7F83DACDFCA848E78470297E638B38AB0FFDC8CBD83DASystem.Data.Entity.DynamicProxies.HCCB_CR_585E5CAF66461CDD0DF7F83DACDFCA848E78470297E638B38AB0FFDC8CBD83DASystem.Data.Entity.DynamicProxies.HCCB_CR_585E5CAF66461CDD0DF7F83DACDFCA848E78470297E638B38AB0FFDC8CBD83DA 

什麼是System.Data.Entity.DynamicProxies.HCCB_CR _...和我爲什麼得到?

更新:希望這可能有所幫助。調試輸出,當我踏進DisplayFor:

The thread '<No Name>' (0x3e70) has exited with code 0 (0x0). 
Step into: Stepping over non-user  code 'System.Web.Mvc.WebViewPage<Test2.Models.HCCBJEFF_CR>.Html.get' 
The thread '<No Name>' (0x3e48) has exited with code 0 (0x0). 
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR.HCCBJEFF_CR_CONTACTS.get' 
Step into: Stepping over non-user code 'System.Data.Entity.DynamicProxies.HCCBJEFF_CR_9D376C551350D68ED0D45F44495C7047639AE18E195454A7CE1DAB8EB66DDAF2.HCCBJEFF_CR_CONTACTS.get' 
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR.CCID.get' 
Step into: Stepping over non-user code 'System.Data.Objects.DataClasses.RelatedEnd.CreateSourceQuery<Test2.Models.HCCBJEFF_CR_CONTACT>' 
Step into: Stepping over non-user code 'System.Data.Objects.DataClasses.RelatedEnd.ValidateLoad<Test2.Models.HCCBJEFF_CR_CONTACT>' 
Step into: Stepping over non-user code 'System.Data.Objects.DataClasses.EntityCollection<Test2.Models.HCCBJEFF_CR_CONTACT>.Load' 
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR_CONTACT.HCCBJEFF_CR_CONTACT' 
Step into: Stepping over non-user code 'System.Data.Entity.DynamicProxies.HCCBJEFF_CR_CONTACT_0D5EDED0A9ECB95525658A667586E43649A2EDCBFD933981026D54A30B929661.HCCBJEFF_CR_CONTACT_0D5EDED0A9ECB95525658A667586E43649A2EDCBFD933981026D54A30B929661' 
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR_CONTACT.CONTACTID.set' 
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR_CONTACT.CNAME.set' 
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR_CONTACT.CCID.set' 
Step into: Stepping over non-user code 'System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly<Test2.Models.HCCBJEFF_CR_CONTACT>' 
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR_CONTACT.CONTACTID.get' 
Step into: Stepping over non-user code 'System.Data.Objects.ObjectStateManager.CheckKeyMatchesEntity' 
Step into: Stepping over non-user code 'System.Data.Objects.ObjectStateManager.AddEntry' 
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR_CONTACT.CNAME.get' 
Step into: Stepping over non-user code 'System.Data.Objects.EntityEntry.TakeSnapshot' 
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR_CONTACT.CCID.get' 
Step into: Stepping over non-user code 'System.Data.Objects.EntityEntry.TakeSnapshot' 
Step into: Stepping over non-user code 'System.Data.Objects.ObjectStateManager.AddEntry' 
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR_CONTACT.HCCBJEFF_CR.get' 
Step into: Stepping over non-user code 'System.Data.Entity.DynamicProxies.HCCBJEFF_CR_CONTACT_0D5EDED0A9ECB95525658A667586E43649A2EDCBFD933981026D54A30B929661.GetBasePropertyValue' 
Step into: Stepping over non-user code 'System.Data.Objects.Internal.EntityProxyFactory.TryGetBasePropertyValue' 
Step into: Stepping over non-user code 'System.Data.Objects.Internal.EntityProxyFactory.CreateBaseGetter.AnonymousMethod__4' 
Step into: Stepping over non-user code 'System.Data.Objects.Internal.PocoPropertyAccessorStrategy.GetNavigationPropertyValue' 
Step into: Stepping over non-user code 'System.Data.Objects.EntityEntry.WillNotRefSteal' 
Step into: Stepping over non-user code 'System.Data.Objects.EntityEntry.FixupEntityReferenceToPrincipal' 
Step into: Stepping over non-user code 'Test2.Models.HCCBJEFF_CR_CONTACT.HCCBJEFF_CR.set' 
Step into: Stepping over non-user code 'System.Data.Entity.DynamicProxies.HCCBJEFF_CR_CONTACT_0D5EDED0A9ECB95525658A667586E43649A2EDCBFD933981026D54A30B929661.HCCBJEFF_CR.set' 
Step into: Stepping over non-user code 'System.Data.Objects.Internal.PocoPropertyAccessorStrategy.SetNavigationPropertyValue' 
Step into: Stepping over non-user code 'System.Data.Objects.DataClasses.RelatedEnd.Add' 
Step into: Stepping over non-user code 'System.Data.Objects.DataClasses.EntityReference<Test2.Models.HCCBJEFF_CR>.ReferenceValue.set' 
Step into: Stepping over non-user code 'System.Data.Objects.DataClasses.EntityReference.SetEntityKey' 
Step into: Stepping over non-user code 'System.Data.Objects.EntityEntry.FixupEntityReferenceToPrincipal' 
Step into: Stepping over non-user code 'System.Data.Objects.EntityEntry.FixupReferencesByForeignKeys' 
Step into: Stepping over non-user code 'System.Data.Objects.ObjectStateManager.FixupReferencesByForeignKeys' 
Step into: Stepping over non-user code 'System.Data.Objects.ObjectStateManager.AddEntry' 
Step into: Stepping over non-user code 'System.Data.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly<Test2.Models.HCCBJEFF_CR_CONTACT>' 
Step into: Stepping over non-user code 'System.Data.Common.Internal.Materialization.Coordinator<Test2.Models.HCCBJEFF_CR_CONTACT>.ReadNextElement' 
Step into: Stepping over non-user code 'System.Data.Common.Internal.Materialization.Shaper<Test2.Models.HCCBJEFF_CR_CONTACT>.SimpleEnumerator.MoveNext' 
Step into: Stepping over non-user code 'System.Data.Objects.DataClasses.RelatedEnd.Merge<Test2.Models.HCCBJEFF_CR_CONTACT>' 
Step into: Stepping over non-user code 'System.Data.Objects.DataClasses.EntityCollection<Test2.Models.HCCBJEFF_CR_CONTACT>.Load' 
Step into: Stepping over non-user code 'System.Data.Objects.DataClasses.RelatedEnd.DeferredLoad' 
Step into: Stepping over non-user code 'System.Data.Objects.Internal.LazyLoadBehavior.LoadProperty<System.__Canon>' 
Step into: Stepping over non-user code 'System.Data.Entity.DynamicProxies.HCCBJEFF_CR_9D376C551350D68ED0D45F44495C7047639AE18E195454A7CE1DAB8EB66DDAF2.HCCBJEFF_CR_CONTACTS.get' 
Step into: Stepping over non-user code 'System.Web.Mvc.ModelMetadata.FromLambdaExpression<Test2.Models.HCCBJEFF_CR,System.Collections.Generic.ICollection<Test2.Models.HCCBJEFF_CR_CONTACT>>.AnonymousMethod__2' 
Step into: Stepping over non-user code 'System.Web.Mvc.ModelMetadata.Model.get' 
Step into: Stepping over non-user code 'System.Web.Mvc.Html.TemplateHelpers.TemplateHelper' 
Step into: Stepping over non-user code 'System.Web.Mvc.Html.TemplateHelpers.TemplateFor<Test2.Models.HCCBJEFF_CR,System.Collections.Generic.ICollection<Test2.Models.HCCBJEFF_CR_CONTACT>>' 

HCCB_CR_CONTACT模板:

@model Test.Models.HCCB_CR_CONTACT 

    <fieldset> 
     <legend>HCCB_CR_CONTACT</legend> 

     <div class="display-label"> 
      @Html.DisplayNameFor(model => model.ID) 
     </div> 
     <div class="display-field"> 
      @Html.DisplayFor(model => model.ID) 
     </div> 
     <div class="display-label"> 
      @Html.DisplayNameFor(model => model.CCID) 
     </div> 
     <div class="display-field"> 
      @Html.DisplayFor(model => model.CCID) 
     </div> 
    </fieldset> 
    <p> 
     @Html.ActionLink("Edit", "Edit", new { id=Model.ID }) | 
     @Html.ActionLink("Back to List", "Index") 
    </p> 
+0

這些是真正的類名嗎? –

+0

HCCB_CR和HCCB_CR_CONTACT是從現有Oracle表中生成的真實類名。輸出似乎正在顯示一個生成的代理。 – Jeff

回答

2

因爲它不知道如何呈現在HashSet中的項目,DisplayFor呼籲每個項目的ToString方法在集合。

你可能想看看creating MVC display templates and edit templates

+0

我試了一個MVC顯示模板,並得到了相同的輸出。看起來像它被忽略,所以我甚至明確指定模板名稱作爲DisplayFor中的第二個參數,並且仍然獲得了該代理輸出。這很奇怪,因爲在調試DisplayFor時,調試器將model.HCCB_CR_CONTACTS報告爲正確的類型,我可以在深入分析中看到子數據。 – Jeff

+1

您是爲散列集或單個聯繫人創建模板嗎?該聯繫人是不知道如何呈現。在上面的視圖中,您可以嘗試以下方法:爲每個循環創建一個循環,通過Model.Hccb_cr_contacts循環,呈現單個聯繫人對象。如果可行,你可以將其移動到模板中 –

+0

我爲個人聯繫人創建了一個名爲HCCB_CR_CONTACT的模板。從我讀過的內容來看,如果我使用單獨的模板(與IEnumerable與循環相反),DisplayFor應該爲我處理循環。我還嘗試了一個名爲HCCB_CR_CONTACTS的局部視圖,它帶有IEnumerable和一個循環,並且能夠正常顯示數據。所以我遇到的主要問題是爲什麼不直接使用(或不使用)模板渲染?在DisplayFor的調試斷點上,它知道它正在傳遞聯繫人類型,並讓我鑽取子數據,但是當它呈現時,它將吐出代理的東西。 – Jeff

0

我有同樣的問題,但不知何故,我.cshtml文件(DisplayTemplates)沒有公佈,(再)。

確保它是構建動作設置爲內容

我花時間弄清楚,所以我想提一提它作爲一個解決方案。

0

我只是碰到了這個自己。請確保您擁有以下內容:

  1. 在您的共享視圖文件夾中,您需要一個文件夾標題DisplayTemplates。
  2. 在你的文件夾DisplayTemplates你需要你的部分觀點,而這正是命名爲模型(所以你的情況,該文件將是/Shared/DisplayTemplates/HCCB_CR_CONTACT.cshtml,文件名前沒有下劃線)。

,以使用您的測試的東西,你會做非常相似的東西爲例...

/查看/共享/ DisplayTemplates/HCCB_CR_CONTACT。CSHTML

@model Test.Models.HCCB_CR_CONTACT 

<fieldset> 
    <legend>HCCB_CR_CONTACT</legend> 

    <div class="display-label"> 
     @Html.DisplayNameFor(model => model.ID) 
    </div> 
    <div class="display-field"> 
     @Html.DisplayFor(model => model.ID) 
    </div> 
    <div class="display-label"> 
     @Html.DisplayNameFor(model => model.CCID) 
    </div> 
    <div class="display-field"> 
     @Html.DisplayFor(model => model.CCID) 
    </div> 
</fieldset> 
<p> 
    @Html.ActionLink("Edit", "Edit", new { id=Model.ID }) | 
    @Html.ActionLink("Back to List", "Index") 
</p> 

/Views/HCCB_CR_BlahBlah.cshtml

@model HCCB_CR 

<div> 
    <span>@Model.CCID</span> 
    @Html.DisplayFor(model => model.HCCB_CR_CONTACTS)  
</div> 

:此方法使用ASP.Net MVC 5和.Net 4.5.1用剃刀意見。

相關問題