gpt4 book ai didi

c# - 如何从 MVC Razor 中的两个表返回带有外部连接的 View

转载 作者:行者123 更新时间:2023-11-30 22:07:29 25 4
gpt4 key购买 nike

我的项目中有两个表作为模型,例如:-

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; }
}

现在我想在我的 Controller 中访问这个 ViewModel,然后在我的 cshtml 中使用它。

我的 Controller :-

public ActionResult Audio() 
{
ViewBag.Title = "Audio";

var AudioSummary = new GetDetailsVM();
var viewModel = new AudioAlbumVM
{
AudioObjList = AudioSummary.GetAudio().First()
};

return View(viewModel);
}

更新
我的 View (Audio.cshtml)如下:-

@model GarhwalMusic.Model‌​s.AudioAlbumVM.AudioObjList

<a class="art" href="single.html"> @Model.AudioObjList</a>

我正在回答这个问题 LINQ left join only works in the ActionResult但我完全迷路了。需要有关如何使用另一个 ViewModel(GetDetailsVM) 然后在 Controller 中然后在 cshtml 中创建 AudioAlbumVM 的帮助和解释。非常感谢任何帮助!!

最佳答案

从您的评论中提取

Now I'm getting this error:- The model item passed into the dictionary is of type 'GarhwalMusic.Models.AudioAlbumVM', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[GarhwalMusic.Model‌​s.AudioAlbumVM]'.

问题出在这段代码上

    var viewModel = new AudioAlbumVM //its a single model
{
AudioObjList = AudioSummary.GetAudio().First()
};

但是您的 View 似乎期待一个 model类型 IEnumerable<GarhwalMusic.Model‌​s.AudioAlbumVM>或(List<GarhwalMusic.Model‌​s.AudioAlbumVM>)。您需要传递 List<GarhwalMusic.Model‌​s.AudioAlbumVM>到您的 View 或更改您的 View 以接受类型为 GarhwalMusic.Model‌​s.AudioAlbumVM 的模型.

但查看您的代码,我假设您正在尝试传递 AudioObjList 的集合进入您的 View 。所以你的 View 必须接受一个类型的模型

GarhwalMusic.Model‌​s.AudioAlbumVM.AudioObjList你只需要传递 viewModel.AudioObjList从你的 Controller 。

编辑 1:在您添加更多 View 详细信息后,您访问数据的方式有误。

你的Model.AudioObjList类型为 IEnumerable<dynamic>以及如何在 Vie 上打印类似 @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> .所以取第一个数据。

关于c# - 如何从 MVC Razor 中的两个表返回带有外部连接的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41148138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com