Asp.net MVC . ビューページにIDの代わりに名前を表示するには?


皆さん、こんにちは!
ビューに問題があります。
説明: 主キーと副キーに関連するいくつかのテーブルを持つデータベースがあります。
テーブル:
論文
カテゴリー
サブカテゴリ

私がやろうとしているのは、異なるカテゴリの製品のリストを表示することです。
しかし、名前の代わりにIDが表示されます。
このような:
サブカテゴリ ID = 1
トンボ =サムスンs4
説明 = 黒、白、金
価格 = 75,00
ストック = 35

私が見ているものを示すリンクをクリックしてください:
リンク

SubCategory Id の代わりに Name を表示してほしいです。例: スマートフォン、洗濯機、電子レンジ …

私が試したこと:

モデル -> ArticleModels.cs

public class ArticleModels
    {
        public int ART_Id { get; set; }

        [Display(Name = "Sous Categorie")]
        public int ART_SCAT_Id { get; set; }

        [Display(Name = "Libelle")]
        public string ART_Libelle { get; set; }

        [Display(Name = "Description")]
        public string ART_Description { get; set; }

        [Display(Name="Prix")]
        public decimal ART_Prix { get; set; }
        [Display(Name = "Stock")]
        public int ART_Stock { get; set; }
    }

DAL -> ArticleBL.cs

public static List<ArticleModels> SelectAllArticle()
        {
            var rtn = new List<ArticleModels>();
            using (var context = new WebShopEntities())
            {
                // ReSharper disable once LoopCanBeConvertedToQuery
                foreach (var item in context.Article)
                {
                    rtn.Add(new ArticleModels
                    {
                        ART_Id = item.ART_Id,
                        ART_SCAT_Id = item.ART_SCAT_Id,
                        ART_Libelle = item.ART_Libelle,
                        ART_Description = item.ART_Description,
                        ART_Prix = item.ART_Prix,
                        ART_Stock = item.ART_Stock
                    });
                }

            }
            return rtn;
        }

コントローラ -> ArticleControllers.cs

public ActionResult Index()
        {
            var lstClient = ArticleBL.SelectAllArticle().ToList();
            return View(lstClient);
        }

これは私のテーブルのサブカテゴリです

public int SCAT_Id { get; set; }
public int SCAT_CAT_Id { get; set; }
public string SCAT_Libelle { get; set; }

解決策 1

上に示した Model クラスがデータベースにマップされた Entity Model クラスである場合、これはコードから非常に明確です。ViewModel クラスを作成し、それをビューで使用する必要があるため、最初に ViewModel を作成します。

C#
public class ArticleViewModel
{
    public int ART_Id { get; set; }

    [Display(Name = "Sous Categorie")]
    public string SCAT_Libelle { get; set; }


    [Display(Name = "Libelle")]
    public string ART_Libelle { get; set; }

    [Display(Name = "Description")]
    public string ART_Description { get; set; }

    [Display(Name="Prix")]
    public decimal ART_Prix { get; set; }
    [Display(Name = "Stock")]
    public int ART_Stock { get; set; }
}

次に、コントローラーアクションでクエリを変更して、両方のテーブルを結合します ART_SCAT_ID 結果を新しい作成ビューモデルのタイプのリストに投影します。この場合、メソッドの定義を更新する必要があります。

C#
public static List<ArticleViewModel> SelectAllArticle()
        {
            var articles = new List<ArticleViewModel>();
            using (var context = new WebShopEntities())
            {
                var result = from article in context.Article
                             join subCategory in context.subCategory
                             on article.ART_SCAT_Id equals subCategory.SCAT_CAT_Id   
                foreach (var item in result)
                {
                    rtn.Add(new ArticleViewModel
                    {
                        ART_Id = article.ART_Id,
                        SCAT_Libelle = subCategory.SCAT_Libelle,
                        ART_Libelle = article.ART_Libelle,
                        ART_Description = article.ART_Description,
                        ART_Prix = article.ART_Prix,
                        ART_Stock = article.ART_Stock
                    });
                }

            }
            return articles;
        }

それが役に立てば幸い。

解決策 2

こんにちは@Ehsan Sajjad、
ご協力いただきありがとうございます。

私はこのように解決するために到着しました:

var lstArt = new List<ArticleModels>();
            using (var ctx = new WebShopEntities1())
            {
                lstArt = ctx.Article.Select(a => new ArticleModels()
                {
                    ART_Id = a.ART_Id,
                    ART_SCAT_Id = a.ART_Stock,
                    ART_Libelle = a.ART_Libelle,
                    ART_Description = a.ART_Description,
                    ART_Prix = a.ART_Prix,
                    ART_Stock = a.ART_Stock,
                    SCAT_Libelle = a.SousCategorie.SCAT_Libelle
                }).ToList();

            }
            return lstArt;
public class ArticleModels
    {
        public int ART_Id { get; set; }
        public int ART_SCAT_Id { get; set; }
        [Display(Name = "Libelle")]
        public string ART_Libelle { get; set; }
        [Display(Name = "Description")]
        public string ART_Description { get; set; }
        [Display(Name = "Prix")]
        public decimal ART_Prix { get; set; }
        [Display(Name = "Stock")]
        public int ART_Stock { get; set; }
        [Display(Name = "Sous Categorie")]
        public string SCAT_Libelle { get; set; }
    }

そしてそれはうまくいきます! 🙂



Source link

コメント

タイトルとURLをコピーしました