【问题标题】:To add dropdownlist using a secondary table column values使用辅助表列值添加下拉列表
【发布时间】:2021-04-28 08:04:28
【问题描述】:

我必须在我现有的项目“moviesite”中添加一个dropdownlist,我有一个主表moviestable 用于addingeditdelete 电影。现在添加了一个新表Genre 来添加movieGenre。第二个表由两列组成,“GenreId 设置为主键和身份,第二列是name(包括动作、戏剧、喜剧等类型),并在主表中添加了一列GenreRefId并设置为Foreign-key。现在我想访问辅助表的列以在主项目中进行下拉。所以我创建了一个新模型类“GenreClass.cs”并将其添加到dbcontext。现在我被如何实现它所困扰在模型、控制器和索引中。

NewmovieClass.cs 



using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
using Moviesite.Enums;
using System.ComponentModel.DataAnnotations.Schema;

namespace Moviesite.Models
{
    public class NewmovieClass
    {
        [Key]

    
        public int Movieid { get; set; }

        [Required]
        public string Movietitle { get; set; }

        [Required]
        public string Description { get; set; }

        [Required]
        public string Storyline { get; set; }

        public int Year { get; set; }

        public DateTime Releasedate { get; set; }

        public int Runtime { get; set; }
        [Column(TypeName="nvarchar(50)")]
        public Mvetypenum MovieType { get; set; }



        public int GenreRefId { get; set; }

        [ForeignKey("GenreRefId")]

        public GenreClass Genre { get; set; }

    }
}






GenreClass.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
using Moviesite.Enums;
using System.ComponentModel.DataAnnotations.Schema;


namespace Moviesite.Models
{
    public class GenreClass
    {
       [Key]
        public int GenreId { get; set; }
        
        public string Name { get; set; }

        public ICollection<NewmovieClass> newmovieClasses { get; set; }
     
    }
}









MveController.cs


using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Moviesite.Models;
using Microsoft.EntityFrameworkCore;

namespace Moviesite.Controllers
{
    public class MveController : Controller
    {
        private readonly ApplicationDbContext _db;

        
        public MveController(ApplicationDbContext db)
        {
            _db = db;
        }
        public IActionResult Index()
        {

            var displaydata = _db.Moviestable.ToList();
            return View(displaydata);


            
        }

        [HttpGet]

        public async Task<IActionResult> Index (String Mvesearch)

        {
            ViewData["Getmoviedetails"] = Mvesearch;

            var mvequery = from x in _db.Moviestable select x;

            if (!string.IsNullOrEmpty(Mvesearch))

            {
                mvequery = mvequery.Where(x => x.Movietitle.Contains(Mvesearch) || x.Description.Contains(Mvesearch));
            }

            return View(await mvequery.AsNoTracking().ToListAsync());

        }
        public IActionResult Create()

        {
            return View();


        }
        [HttpPost]
        public async Task<IActionResult> Create([Bind("Movieid,Movietitle,Description,Storyline,Year,Releasedate,Runtime,MovieType")] NewmovieClass nmc)
        {

            if (ModelState.IsValid)
          {
                _db.Add(nmc);
                await _db.SaveChangesAsync();
                return RedirectToAction("Index");

            }
            return View(nmc);
        }

        public async Task< IActionResult> Edit(int? id)
        {
            if(id==null)
            {
                return RedirectToAction("Index");
            }
            var getmvedetails = await _db.Moviestable.FindAsync(id);
            return View(getmvedetails);
        }

        [HttpPost]
        public async Task<IActionResult> Edit(NewmovieClass mc)
        {
            if (ModelState.IsValid)
            {
                _db.Update(mc);

                await _db.SaveChangesAsync();

                return RedirectToAction("Index");


            }
            return View(mc);

        }

        public async Task<IActionResult> Details(int? id)
        {
            if (id == null)
            {
                return RedirectToAction("Index");
            }
            var getmvedetails = await _db.Moviestable.FindAsync(id);
            return View(getmvedetails);
        }

        public async Task<IActionResult> Delete(int? id)
        {
            if (id == null)
            {
                return RedirectToAction("Index");
            }
            var getmvedetails = await _db.Moviestable.FindAsync(id);
            return View(getmvedetails);
        }

        [HttpPost]

        public async Task<IActionResult> Delete(int id)
        {
            
            var getmvedetails = await _db.Moviestable.FindAsync(id);

            _db.Moviestable.Remove(getmvedetails);

            await _db.SaveChangesAsync();

            return RedirectToAction("Index");
        }

       
        
           

           
           
       
        

       
    }
}






AppDbcontext



using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;


namespace Moviesite.Models
{
    public class ApplicationDbContext : DbContext
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
        {

        }

        public DbSet<NewmovieClass> Moviestable { get; set; }

      public DbSet<GenreClass> Genre { get; set; }


    }

    }



【问题讨论】:

    标签: c# sql asp.net-core model-view-controller dropdown


    【解决方案1】:

    第一步获取和流派列表并设置在viewbag

    public IActionResult Create()
    
            {
               viewbag.Genres=new SelectList(_db.Genre,"Name","GenreId");
                return View();
    
    
            }
    

    第二步:绑定到dropdown html

     <select asp-for="GenreRefId" asp-items="viewbag.Genres"></select>
    

    第三步:在Post方法中添加GenreRefId

        [HttpPost]
        public async Task<IActionResult> Create([Bind("Movieid,Movietitle,Description,Storyline,Year,Releasedate,Runtime,MovieType,GenreRefId")] NewmovieClass nmc)
        {
    
            if (ModelState.IsValid)
          {
                _db.Add(nmc);
                await _db.SaveChangesAsync();
                return RedirectToAction("Index");
    
            }
            return View(nmc);
        }
    

    【讨论】:

    • Besharat 很有帮助。 ,我知道了,它如何显示在索引或任何其他页面中?
    • 你好,如果你想显示关系,只需使用“include”方法:_db.NewmovieClass.include(c=>c.Genre).first(...)
    • 请阅读文档:延迟加载 && Ef 中的急切加载:entityframeworktutorial.net/…
    • ,, ...谢谢您的信息。并且可以使用第三个表来实现复选框列表并向它添加 FK 引用?
    • 当然,您可以创建另一个问题并通知我
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多