Bundle IdentityUser к билету - PullRequest
       8

Bundle IdentityUser к билету

0 голосов
/ 26 октября 2019

Это домашнее задание. Где я должен сделать веб-сайт с MVC 2.2 и сделать возможным создание билета с некоторой базовой информацией и ссылкой IdentityUser на билет.

Класс:

public class Ticket
{
    public int ID { get; set; }
    [Required]
    public string Klant { get; set; }
    [Required]
    public string Applicatie { get; set; }
    [Required]
    public string Onderwerp { get; set; }
    [Required]
    public string Omschrijving { get; set; }
    public DateTime Datum { get; set; }
    public string Status { get; set; }
}

Контроллер:

public class TicketsController : Controller
{
    private readonly ApplicationDbContext _context;

    UserManager<IdentityUser> _userManager;
    public TicketsController(UserManager<IdentityUser> userManager)
    {
        _userManager = userManager;
    }

    public TicketsController(ApplicationDbContext context)
    {
        _context = context;
    }

    // GET: Tickets
    public async Task<IActionResult> Index()
    {
        return View(await _context.Ticket.ToListAsync());
    }

Это добавлено к контроллеру в данный момент.

UserManager<IdentityUser> _userManager;
    public TicketsController(UserManager<IdentityUser> userManager)
    {
        _userManager = userManager;
    }

Итак, я спрашивалЯ сам, как это сделать, и я был бы очень признателен, если кто-то знает, что делать и может объяснить это хорошо.

Заранее спасибо. Если вам нужна дополнительная информация, просто спросите.

1 Ответ

0 голосов
/ 28 октября 2019

Вот рабочий сценарий создания одного тикета с одним IdentityUser.

  1. Ticket

    public class Ticket
    {
        public int ID { get; set; }
        [Required]
        public string Klant { get; set; }
        [Required]
        public string Applicatie { get; set; }
        [Required]
        public string Onderwerp { get; set; }
        [Required]
        public string Omschrijving { get; set; }
        public DateTime Datum { get; set; }
        public string Status { get; set; }
        public string IdentityUserId { get; set; }
        public virtual IdentityUser IdentityUser { get; set; }
    }
    
  2. ApplicationDbContext

    public class ApplicationDbContext : IdentityDbContext
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
            : base(options)
        {
        }
        public DbSet<Ticket> Tickets { get; set; }
    
        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
            builder.Entity<Ticket>().HasOne(t => t.IdentityUser).WithMany();
        }
    }
    
  3. TicketsController

    public class TicketsController : Controller
    {
        private readonly ApplicationDbContext _context;
        private readonly UserManager<IdentityUser> _userManager;
    
        public TicketsController(ApplicationDbContext context
            , UserManager<IdentityUser> userManager)
        {
            _context = context;
            _userManager = userManager;
        }
    
        // GET: Tickets
        public async Task<IActionResult> Index()
        {
            var applicationDbContext = _context.Tickets.Include(t => t.IdentityUser);
            return View(await applicationDbContext.ToListAsync());
        }
    
        // GET: Tickets/Details/5
        public async Task<IActionResult> Details(int? id)
        {
            if (id == null)
            {
                return NotFound();
            }
    
            var ticket = await _context.Tickets
                .Include(t => t.IdentityUser)
                .FirstOrDefaultAsync(m => m.ID == id);
            if (ticket == null)
            {
                return NotFound();
            }
    
            return View(ticket);
        }
    
        // GET: Tickets/Create
        public IActionResult Create()
        {
            ViewData["IdentityUserId"] = new SelectList(_context.Users, "Id", "Id");
            return View();
        }
    
        // POST: Tickets/Create
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("ID,Klant,Applicatie,Onderwerp,Omschrijving,Datum,Status,IdentityUserId")] Ticket ticket)
        {
            if (ModelState.IsValid)
            {
                _context.Add(ticket);
                await _context.SaveChangesAsync();
                return RedirectToAction(nameof(Index));
            }
            ViewData["IdentityUserId"] = new SelectList(_context.Users, "Id", "Id", ticket.IdentityUserId);
            return View(ticket);
        }
    
        // GET: Tickets/Edit/5
        public async Task<IActionResult> Edit(int? id)
        {
            if (id == null)
            {
                return NotFound();
            }
    
            var ticket = await _context.Tickets.FindAsync(id);
            if (ticket == null)
            {
                return NotFound();
            }
            ViewData["IdentityUserId"] = new SelectList(_context.Users, "Id", "Id", ticket.IdentityUserId);
            return View(ticket);
        }
    
        // POST: Tickets/Edit/5
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Edit(int id, [Bind("ID,Klant,Applicatie,Onderwerp,Omschrijving,Datum,Status,IdentityUserId")] Ticket ticket)
        {
            if (id != ticket.ID)
            {
                return NotFound();
            }
    
            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(ticket);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!TicketExists(ticket.ID))
                    {
                        return NotFound();
                    }
                    else
                    {
                        throw;
                    }
                }
                return RedirectToAction(nameof(Index));
            }
            ViewData["IdentityUserId"] = new SelectList(_context.Users, "Id", "Id", ticket.IdentityUserId);
            return View(ticket);
        }
    
        // GET: Tickets/Delete/5
        public async Task<IActionResult> Delete(int? id)
        {
            if (id == null)
            {
                return NotFound();
            }
    
            var ticket = await _context.Tickets
                .Include(t => t.IdentityUser)
                .FirstOrDefaultAsync(m => m.ID == id);
            if (ticket == null)
            {
                return NotFound();
            }
    
            return View(ticket);
        }
    
        // POST: Tickets/Delete/5
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> DeleteConfirmed(int id)
        {
            var ticket = await _context.Tickets.FindAsync(id);
            _context.Tickets.Remove(ticket);
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }
    
        private bool TicketExists(int id)
        {
            return _context.Tickets.Any(e => e.ID == id);
        }
    }
    
  4. Create.cshtml

    @model CoreIdentity2.Models.Ticket
    
    @{
        ViewData["Title"] = "Create";
    }
    
    <h1>Create</h1>
    
    <h4>Ticket</h4>
    <hr />
    <div class="row">
        <div class="col-md-4">
            <form asp-action="Create">
                <div asp-validation-summary="ModelOnly" class="text-danger"></div>
                <div class="form-group">
                    <label asp-for="Klant" class="control-label"></label>
                    <input asp-for="Klant" class="form-control" />
                    <span asp-validation-for="Klant" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="Applicatie" class="control-label"></label>
                    <input asp-for="Applicatie" class="form-control" />
                    <span asp-validation-for="Applicatie" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="Onderwerp" class="control-label"></label>
                    <input asp-for="Onderwerp" class="form-control" />
                    <span asp-validation-for="Onderwerp" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="Omschrijving" class="control-label"></label>
                    <input asp-for="Omschrijving" class="form-control" />
                    <span asp-validation-for="Omschrijving" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="Datum" class="control-label"></label>
                    <input asp-for="Datum" class="form-control" />
                    <span asp-validation-for="Datum" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="Status" class="control-label"></label>
                    <input asp-for="Status" class="form-control" />
                    <span asp-validation-for="Status" class="text-danger"></span>
                </div>
                <div class="form-group">
                    <label asp-for="IdentityUserId" class="control-label"></label>
                    <select asp-for="IdentityUserId" class ="form-control" asp-items="ViewBag.IdentityUserId"></select>
                </div>
                <div class="form-group">
                    <input type="submit" value="Create" class="btn btn-primary" />
                </div>
            </form>
        </div>
    </div>
    
    <div>
        <a asp-action="Index">Back to List</a>
    </div>
    
    @section Scripts {
        @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...