Поскольку невозможно передать несколько моделей в представление в ASP.NET MVC 4, я пытаюсь объединить различные модели в динамический ExpandoObject
, а затем распаковать его из представления.
Моя модель (состоит не только из этого класса, но для краткости я просто покажу это):
public class Modular_ArtistModel
{
public string Artist_Name { get; set; }
}
Мой контроллер:
(Я упаковываю не только этот List<>
объект в dynamic
объект, но для краткости ...)
dynamic ArtistModel = new ExpandoObject();
var Modular_ArtistModel = LoadSP_Modular_ArtistModel("sp_Mod_Artist_Artist", i);
List<Modular_ArtistModel> mod_ArtistModel = new List<Modular_ArtistModel>();
foreach (var row in Modular_ArtistModel)
{
mod_ArtistModel.Add(new Modular_ArtistModel
{
Artist_Name = row.Artist_Name
});
}
ArtistModel.Artist = mod_ArtistModel;
My View:
(Это первое в представлении, и программа задыхается от следующего назначения)
@model dynamic
@{
string artist_Name = Model.Artist.Artist_Name;
}
Когда курсор достигает вышеуказанного назначения в слое View, он выдает следующее исключение:
'Model.Artist.Artist_Name' threw an exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException'
Data: {System.Collections.ListDictionaryInternal}
HResult: -2146233088
HelpLink: null
InnerException: null
Message: "'System.Collections.Generic.List<....Models.Modular_ArtistModel>' does not contain a definition for 'Artist_Name'"
Source: "Anonymously Hosted DynamicMethods Assembly"
StackTrace: " at CallSite.Target(Closure , CallSite , Object )\r\n at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)"
TargetSite: {System.Object CallSite.Target(System.Runtime.CompilerServices.Closure, System.Runtime.CompilerServices.CallSite, System.Object)}
Кто-нибудь знает, что мне нужно сделать, чтобы это исправить? Не уверен, что это быстрое исправление или более масштабный редизайн.