我的项目中有两个表格作为模型,如: -
public partial class TblAlbum
{
public int ID { get; set; }
public string Album { get; set; }
public string Artists { get; set; }
public Nullable<int> AudioID { get; set; }
public Nullable<int> VideoID { get; set; }
public virtual TblVideo TblVideo { get; set; }
public virtual TblAudio TblAudio { get; set; }
}
和
public partial class TblAudio
{
public int ID { get; set; }
public string Name { get; set; }
public string Alt { get; set; }
public string Artist { get; set; }
public string Image { get; set; }
public int LangID { get; set; }
public virtual TblLanguage TblLanguage { get; set; }
public virtual ICollection<TblAlbum> TblAlbums { get; set; }
}
现在我已将ViewModel设为 GetDetailsVM ,可以访问这两个表,并且 LINQ查询 为: -
public class GetDetailsVM
{
private MusicEntities db = new MusicEntities();
public IEnumerable<dynamic> GetAudio()
{
var AudioList = from au in db.TblAudios
join al in db.TblAlbums on au.ID equals al.AudioID into ar
from al in ar.DefaultIfEmpty()
select new { au,al };
return AudioList.ToList();
}
}
我的ViewModel(AudioAlbumVM)读取Getaudio()应该是这样的: -
public class AudioAlbumVM
{
public IEnumerable<dynamic> AudioObjList { get; set; }
public string AlbumName { get; set; }
}
现在我想在我的控制器中访问此ViewModel,然后在我的cshtml中使用它。
我的控制器: -
public ActionResult Audio()
{
ViewBag.Title = "Audio";
var AudioSummary = new GetDetailsVM();
var viewModel = new AudioAlbumVM
{
AudioObjList = AudioSummary.GetAudio().First()
};
return View(viewModel);
}
更新
我的视图(Audio.cshtml)如下: -
@model GarhwalMusic.Models.AudioAlbumVM.AudioObjList
<a class="art" href="single.html"> @Model.AudioObjList</a>
我正在经历这个问题LINQ left join only works in the ActionResult,但我完全迷失了。需要帮助和解释如何使用另一个ViewModel(GetDetailsVM)创建AudioAlbumVM然后在控制器中,然后在cshtml 。非常感谢任何帮助!!
答案 0 :(得分:0)
从您的评论中获取此信息
现在我收到此错误: - 传入字典的模型项的类型为'GarhwalMusic.Models.AudioAlbumVM',但此字典需要类型为'System.Collections.Generic.IEnumerable`1的模型项[ GarhwalMusic.Model s.AudioAlbumVM]”。
问题在于此代码
var viewModel = new AudioAlbumVM //its a single model
{
AudioObjList = AudioSummary.GetAudio().First()
};
但似乎您的观点期望model
类型IEnumerable<GarhwalMusic.Models.AudioAlbumVM>
或(List<GarhwalMusic.Models.AudioAlbumVM>
)。您需要将List<GarhwalMusic.Models.AudioAlbumVM>
传递给视图或更改视图以接受GarhwalMusic.Models.AudioAlbumVM
类型的模型。
但是看看你的代码我假设你试图将AudioObjList
的集合传递给你的View。因此,您的视图必须接受类型
GarhwalMusic.Models.AudioAlbumVM.AudioObjList
,您只需要从控制器中传入viewModel.AudioObjList
。
编辑1 :在添加了更多视图详细信息之后,您在访问数据时的方式出错了。
您的Model.AudioObjList
类型为IEnumerable<dynamic>
,您如何才能在@Model.AudioObjList
上打印一些内容?我指的是这段代码
<a class="art" href="single.html"> @Model.AudioObjList</a>
您需要将此动态类型强制转换为您在linq中创建的对象,然后提取其属性值。像
这样的东西@((yourObject)Model.AudioObjList[0]).propertyName
(yourObject)Model.AudioObjList[0]
类型会将您的dynamic
数据投射到yourObject
类型中。
您需要[0]
,因为AudioObjList
的类型为IEnumerable<dynamic>
。所以拿第一个数据。