Ho un compito molto semplice nella mia applicazione ASP.NET CORE MVC . quindi la cosa è che ho 2 abbonamenti modelli e tagliandi e hanno uno a molti rapporti e utilizzando le seguenti classi di modello e scaffolding sono stato in grado di generare un dropDownList su coupon creare pagina per selezionare chiunque degli abbonamenti attualmente nel database. Sto usando Entity Framework anche per il mio db e lo scaffolding.
Classi di modelli
public class Subscription
{
public string FirstName { get; set; }
[Key]
public int ID { get; set; }
[Required]
public string Identifier { get; set; }
public bool State { get; set; }
[Required]
public string Description { get; set; }
[Required]
public int MonthlyPrice { get; set; }
[Required]
public int MinMonthlyPrice { get; set; }
[Required]
public int MonthlyDiscount { get; set; }
public virtual ICollection<Coupon> Coupons { get; set; }
public virtual ICollection<RegisterViewModel> Registrations { get; set; }
}
public class Coupon
{
[Required]
public string CouponCode { get; set; }
[Required]
public DateTime StartTime { get; set; }
[Required]
public DateTime EndTime { get; set; }
[Key]
public int ID { get; set; }
public int Discount { get; set; }
public bool IsPercentage { get; set; }
[ForeignKey("Identifier")]
public int SubscriptionId { get; set; }
public virtual Subscription Identifier { get; set; }
[Required]
public int ValidMonths { get; set; }
public bool IsSponsored { get; set; }
[Required]
public int Length { get; set; }
[Required]
public int Quantity { get; set; }
}
ora voglio la stessa discesa sulla mia pagina di registrazione , sto usando il sistema di registrazione integrato degli account degli utenti individuali e voglio solo includere lo stesso menu a discesa presente sulla pagina dei coupon per selezionare "abbonamento". Voglio lo stesso su pagina di registrazione. Come lo posso fare? AccountsController non sta ottenendo ApplicationDbContext nel suo parametro di costruzione a differenza di altri controller come "couponsController", ecco perché ho difficoltà a capire come ottenere i dati dal database sulla pagina di registrazione.
So che il seguente codice aiuta a farmi l'elenco di abbonamenti e ottenere solo una proprietà specifica da esso.
// GET: Coupons/Create
public IActionResult Create()
{
ViewData["SubscriptionId"] = new SelectList(_context.Subscription, "ID", "Identifier");
return View();
}
Voglio lo stesso tipo di cose nella mia pagina di registrazione, ma dbcontext non esiste su AccountsController e non posso aggiornarlo bcz Non so quali opzioni fornire nel costruttore.
Se hai già il tuo DbContext, dovrebbe essere automaticamente iniettato se crei un costruttore simile agli altri tuoi controller.
private ApplicationDbContext _db;
public AccountsController(ApplicationDbContext db)
{
_db = db;
}
Quindi puoi accedere ai tuoi DbSet attraverso questo. Se non funziona, controlla se hai qualcosa di simile in ConfiguraServices nella tua classe Startup:
services.AddTransient<ApplicationDbContext>();
Se gli altri controller hanno accesso a DbContext, qualcosa di simile a quella linea dovrebbe già essere lì.