ASP.NET MVC3 RenderPartial 傳入空Model時出現字典類型錯誤


 

在一個人員信息的View中,稱為PersonView,調用了另外一個partial view,用來顯示人員專業資質,稱為QualificationView.PersonView的model類型為Person, QualificationView的model類型為IEnumerable<PersonQualification>。Person類有一個類型為List<PersonQualification>的屬性qualificationList. 在PersonView中通過以下代碼引用QualificaitonView。

Html.RenderPartial("QualificationListControl",Model.qualificationList);



當qualificationList為null時,會出現以下錯誤。

 

“/”應用程序中的服務器錯誤。


傳入字典的模型項的類型為“ConstructionMis.Dll.Entity.Person”,但此字典需要類型 “System.Collections.Generic.IEnumerable`1[ConstructionMis.Dll.Entity.PersonQualification]” 的模型項。

說明: 執行當前 Web 請求期間,出現未經處理的異常。請檢查堆棧跟蹤信息,以了解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。
異常詳細信息: System.InvalidOperationException: 傳入字典的模型項的類型為“ConstructionMis.Dll.Entity.Person”,但此字典需要類型 “System.Collections.Generic.IEnumerable`1[ConstructionMis.Dll.Entity.PersonQualification]” 的模型項。
源錯誤:

行 96: </fieldset>
行 97:  List<ConstructionMis.Dll.Entity.WorkExperience> workList =  ViewBag.workList; 
行 98:  Html.RenderPartial("QualificationListControl",Model.qualificationList);
行 99:  Html.RenderPartial("WorkExperienceControl", workList);
行 100:}
 
調試花了2個小時的時間,終於找到了解決方法。原來,如果在Vew A中調用了Partial View B,則給B傳遞model時,如果傳遞的參數為null,則此參數會被當作View A的model類型進行傳遞。即使作強制類型轉換也不行。
但是,如果不使用partial view,而是直接使用一般的view,則不會出現此問題。
解決partial view傳遞null時出現類型不匹配的方法是在@Html.RenderPartial方法添加第三個參數,如下代碼所示。
 Html.RenderPartial("QualificationListControl", Model.qualificationList, new ViewDataDictionary ());
后來發現,這是ASP.NET MVC的一個bug,可以從此處查看此bug的提交報告
http://aspnet.codeplex.com/workitem/8872
關於此問題的討論及答案可參見
http://stackoverflow.com/questions/650393/asp-net-mvc-renderpartial-with-null-model-gets-passed-the-wrong-type

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM