Francesco Bigi Ответов: 2

Asp.net MVC . Как отобразить имя вместо идентификатора на странице просмотра?


Привет, Люди!
Я не согласен со своими взглядами.
Поясните: у меня есть БД с несколькими таблицами, связанными с первичным и вторичным ключами.
Таблицы:
Статья
Категория
подкатегория

То, что я пытаюсь сделать, это показать список продуктов с другой категорией.
Но вместо имени он показывает мне удостоверение личности.
Подобный этому:
Идентификатор Подкатегории = 1
Libelle не = Samsung s4
Описание = черный, белый, золотой
Цена = 75,00
Склад = 35

Пожалуйста, нажмите на ссылку, которая показывает то, что я вижу:
Ссылка

Вместо идентификатора подкатегории я бы хотел, чтобы он показывал название, например: смартфон, стиральная машина, микроволновая печь ...

Что я уже пробовал:

Модели - & gt; 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 - & gt; 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;
        }


Контроллеры - & gt; 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; }

2 Ответов

Рейтинг:
2

Francesco Bigi

Привет @Эхсан Саджади,
спасибо за помощь.

Я приехал, чтобы решить вот так:

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


И это работает! :)


Ehsan Sajjad

вы не должны обновлять свою модель, если это ваш класс DTO, лучше всего создать ViewModel.

Рейтинг:
17

Ehsan Sajjad

Если класс модели, который вы показали выше, является классом модели сущности, который сопоставлен с вашей базой данных, что совершенно ясно из вашего кода, вам нужно будет создать класс ViewModel и использовать его в своем представлении, поэтому сначала создайте ViewModel:

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 и проецируйте результат в список типа вашего нового create ViewModel, в вашем случае вам нужно обновить определение метода:

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


Надеюсь, это поможет.