Я создаю раскрывающийся список (страна, штат и город в таблице в mvc, но не вставлены название страны, название страны, название города и мудрый штат страны, не связывают правильные данные, все штаты и города отображаются в раскрывающемся списке?)
ex: Когда я выбираю Россию, в выпадающем списке отображаются все США и Россия? // см. ссылку
Я применяю первый подход к коду в asp.net core mvc
Manager.cs
public class Manager
{
[Key]
public int ManagerId { get; set; }
public string ManagerName { get; set; }
//Insertion in Manager table country state and city
[ForeignKey("country")]
public int countryId { get; set; }
public string countryname { get; set; }
[ForeignKey("state")]
public int stateId { get; set; }
public string statename { get; set; }
[ForeignKey("city")]
public int cityId { get; set; }
public string cityname { get; set; }
}
public class city
{
public int cityId { get; set; }
public string cityname { get; set; }
[ForeignKey("state")]
public int stateId { get; set; }
public virtual state states { get; set; }
}
public class state
{
public int stateId { get; set; }
public string statename { get; set; }
[ForeignKey("country")]
public int countryId { get; set; }
public virtual country countrys { get; set; }
}
public class country
{
public int countryId { get; set; }
public string countryname { get; set; }
}
dbcontext.cs
public class dbcontext : IdentityDbContext<Student>
{
public dbcontext(DbContextOptions<dbcontext> options) : base(options)
{
Database.EnsureCreated();
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
}
public virtual DbSet<Manager> manages {get;set;}
public virtual DbSet<country> countrys { get; set; }
public virtual DbSet<state> states { get; set; }
public virtual DbSet<city> citys { get; set; }
}
HomeController:
public class HomeController : Controller
{
private readonly dbcontext contxtclass;
public HomeController(dbcontext contxtclass)
{
this.contxtclass = contxtclass;
}
//not inserted countryname,stataname and cityname in database see the Referance image
[HttpGet]
public async Task<IActionResult> Create(int id)
{
var manager = await contxtclass.manages
.Include(m => m.countryname)
.Include(m => m.statename)
.Include(m => m.cityname)
.FirstOrDefaultAsync(m => m.ManagerId == id);
var countryname = manager.countryname;
return View(manager);
}//here i m put debugger then get an error object referance not set to an object
[HttpPost]
public async Task<IActionResult> Create([Bind("ManagerId,ManagerName,countryId,countryname,stateId,statename,cityId,cityname")] Manager manager)
{
if(ModelState.IsValid)
{
manager.countryname=(await contxtclass.countrys.FindAsync(manager.countryId)).countryname;
manager.cityname = (await contxtclass.states.FindAsync(manager.stateId)).statename;
manager.statename = (await contxtclass.citys.FindAsync(manager.cityId)).cityname;
contxtclass.Add(manager);
await contxtclass.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
//bound the country table record
List<country> countrylist = new List<country>();
countrylist = (from countrys in contxtclass.countrys select countrys).ToList();
countrylist.Insert(0, new country { countryname = "Select" });
ViewBag.listofcountry = countrylist;
//bound the state table record
List<state> statelist = new List<state>();
statelist = (from states in contxtclass.states select states).ToList();
statelist.Insert(0, new state { statename = "Select" });
ViewBag.listofstate = statelist;
//bound the city table record
List<city> citylist = new List<city>();
citylist = (from citys in contxtclass.citys select citys).ToList();
citylist.Insert(0, new city { cityname = "Select" });
ViewBag.listofcity = citylist;
return View(manager);
}
create.cshtml
@model WebApplication2.Models.Manager
@{
Layout = null;
}
<h2>Create</h2>
<form asp-action="Create">
<div asp-validation-summary="ModelOnly"></div>
<div>
<label asp-for="ManagerName"></label>
<input asp-for="ManagerName"/>
<span asp-validation-for="ManagerName"></span>
</div>
<div>
<div asp-validation-summary="ModelOnly"></div>
<div>
<label asp-for="countryname"></label>
<select asp-for="countryId"
asp-items="@(new SelectList(@ViewBag.listofcountry,"countryId","countryname"))"></select>
</div>
</div>
<div>
<div asp-validation-summary="ModelOnly"></div>
<div>
<label asp-for="statename"></label>
<select asp-for="stateId"
asp-items="@(new SelectList(@ViewBag.listofstate,"stateId","statename"))"></select>
</div>
</div>
<div>
<div class="alert-danger" asp-validation-summary="ModelOnly"></div>
<div>
<label asp-for="cityname"></label>
<select asp-for="cityId"
asp-items="@(new SelectList(@ViewBag.listofcity,"cityId","cityname"))"></select>
</div>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</form>
<div>
<a asp-action="Index">Back to List</a>
</div>
это место кода в методе httpget (create) ??? Я поместил этот код в метод httpget
var manager = await _context.manages
.Include(m => m.country)
.Include(m => m.state)
.Include(m => m.city)
.FirstOrDefaultAsync(m => m.ManagerId == id);
var countryname = mamager.country.countryname;
дать ссылку на объект ошибки, не установленную для объекта ???
https://imgur.com/a/ENP8D2a