簡體   English   中英

如何從MVC Razor中的兩個表返回帶有外連接的視圖

[英]How to return view with Outer Joins from two tables in MVC Razor

我的項目中有兩個表作為模型,如: -

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

UPDATE
我的觀點(Audio.cshtml)如下: -

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

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

我正在經歷這個問題LINQ離開加入只能在ActionResult中工作,但我完全迷失了。 需要有關如何使用另一個ViewModel(GetDetailsVM)然后在控制器中創建AudioAlbumVM然后在cshtml中的幫助和解釋。 任何幫助是極大的贊賞!!

從你的評論中得到這個

現在我收到這個錯誤: - 傳入字典的模型項是“GarhwalMusic.Models.AudioAlbumVM”類型,但是這個字典需要一個類型為'System.Collections.Generic.IEnumerable`1的模型項[GarhwalMusic.Model s.AudioAlbumVM]”。

問題在於此代碼

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

但似乎您的視圖期望IEnumerable<GarhwalMusic.Model‌​s.AudioAlbumVM>或( List<GarhwalMusic.Model‌​s.AudioAlbumVM> )類型的model 您需要將List<GarhwalMusic.Model‌​s.AudioAlbumVM>傳遞給您的視圖,或者更改您的視圖以接受GarhwalMusic.Model‌​s.AudioAlbumVM類型的模型。

但是看看你的代碼我假設你試圖將AudioObjList的集合AudioObjList給你的View。 所以你的觀點必須接受一個類型的模型

GarhwalMusic.Model‌​s.AudioAlbumVM.AudioObjList ,你需要只從你的控制器viewModel.AudioObjList

編輯1:添加視圖的更多詳細信息后,您在訪問數據的方式上出錯了。

你的Model.AudioObjListIEnumerable<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>類型。 所以拿第一個數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM