【解決方法】モデル データをカスタム ビュー モデルに渡す方法

プログラミングQA


私は .net 5 mvc に取り組んでおり、テーブル名 cinimas have 5 rows があります。

私の問題 カスタム ビュー モデルでこれらの 5 行を表示できません。

試してみましたが、行が表示されません

私が試したこと

1- モデルの作成

C#
public class Cinema:IEntityBase
    {
        [Key]
        public int Id { get; set; }

        [Display(Name = "Cinema Logo")]
        [Required(ErrorMessage = "Cinema logo is required")]
        public string Logo { get; set; }

        [Display(Name = "Cinema Name")]
        [Required(ErrorMessage = "Cinema name is required")]
        public string Name { get; set; }

       
    }

2-テーブルからビュー モデルとしてデータを表示するカスタム モデル ビューを作成します。

C#
public class CinimaViewModels
    {
        public string Logo { get; set; }
        public string Name { get; set; }
    }

3-create service Interface ICinemasService には、データを表示するための定義があります。

C#
public interface ICinemasService:IEntityBaseRepository<Cinema>
    {
        IQueryable<CinimaViewModels>GetAllCinimas();
    }

ステップ番号4では、テーブルには5行ありますが、行は返されませんでした。

では、この問題を解決する方法

カスタム ビュー モデル CinimaViewModels のデータを Queryable として返す必要がありますが、何も表示されません

この問題をどのように解決しますか?

これをチェックして、モデルから直接データを返し、以下のように 5 行を返します。

var cinmas2 = _context.Cinemas.ToList();
ただし、以下のようにステップ 4 のビュー モデルから行が表示されません。

私が試したこと:

4- implement interface on CinemasService class

public class CinemasService:EntityBaseRepository<Cinema>, ICinemasService
    {
        private readonly AppDbContext _context;
        public CinemasService(AppDbContext context) : base(context)
        {
            _context = context;
        }
     public  IQueryable<CinimaViewModels> GetAllCinimas()
        {
            var cinmas = new Cinema();
         
            var response = new List<CinimaViewModels>
            {
                new CinimaViewModels 
                {
            Description=cinmas.Description,
           Logo=cinmas.Logo,
           Name=cinmas.Name
                }
          
            };
            return response.AsQueryable();

            
        }
}

解決策 1

見積もり:

これをチェックして、モデルから直接データを返し、以下のように 5 行を返します。

C#
var cinmas2 = _context.Cinemas.ToList();

ただし、以下のようにステップ 4 のビュー モデルからは行が表示されません。

C#
public IQueryable<CinimaViewModels> GetAllCinimas()
{
    var cinmas = new Cinema();
    var response = new List<CinimaViewModels>
    {
        new CinimaViewModels 
        {
            Description=cinmas.Description,
            Logo=cinmas.Logo,
            Name=cinmas.Name
        }
    };
    return response.AsQueryable();
}

これで、5 つのシネマを返すコードが 1 つできました。 しかし、あなたはそれを無視することを選択し、代わりに単一のリストを含むリストを作成しました CinimaViewModels ブランクからコピーされたインスタンス Cinema 実例。

そして、あなたは真剣に問題が何であるかを理解できませんか?

取得するために既に必要な作業コードを使用します Cinema インスタンス。 次に、それを使用してシーケンスを入力します CinimaViewModels インスタンス。

C#
public IQueryable<CinimaViewModels> GetAllCinimas()
{
    return _context.Cinemas.Select(cinema => new CinimaViewModels
    {
        Description = cinema.Description,
        Logo = cinema.Logo,
        Name = cinema.Name,
    });
}

コメント

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