내가 네 기관이 필드를 삭제합니다 많은 관계, ef에 의해 생성 된 코드 우선. 그런
데이터베이스보기 : Asp.net 코어 EF 3DropDown, 저장 탐색 속성 tabels입니다
편집 양식을 사용 jQuery를이 첫번째 드롭 다운은 ViewBag에 의해 feeded 및 JSON에 의해 다른이된다.
내가 저장할 때 드롭 다운 만 해당 ID를 retrn :
편집 양식은있다! dooh!
하지만 내 바인딩이 실체 기대는
당신이 vbName을 볼 수 있듯이 이름 필드 널 (null)이 모든 엔티티에 널 및 SaveChanges를 후 .. 돌아왔다
다음은 편집을위한 컨트롤러 코드입니다 :
[HttpGet]
public async Task<IActionResult> YourEditNewCar(int? id)
{
if (id == null)
{
return NotFound();
}
var brands = await _context.VehicleBrands.OrderBy(b => b.vbName).Select(x => new { Id = x.id, Value = x.vbName }).ToListAsync();
var models = await _context.VehicleModels.OrderBy(m => m.vmName).ToListAsync();
var versions= await _context.VehicleVersions.OrderBy(v =>v.vvName).ToListAsync();
var model = new Vehicle();
ViewBag.BrandList = new SelectList(brands, "Id", "Value");
model = await _context.Vehicles.SingleOrDefaultAsync(m => m.id == id);
if (model == null)
{
return NotFound();
}
return View("~/Views/Manage/YourEditNewCar.cshtml", model);
}
public JsonResult getVehicleModelById(int id)
{
List<VehicleModel> vehicleModelList = new List<VehicleModel>();
vehicleModelList = _context.VehicleModels.Where(m => m.VehicleBrand.id == id).OrderBy(m => m.vmName).ToList(); //.Select(y => new { Id = y.id, Value = y.vmName })
vehicleModelList.Insert(0, new VehicleModel { id = 0, vmName = "Car Model" });
return Json(vehicleModelList);
}
public JsonResult getVehicleVersionById(int id)
{
List<VehicleVersion> vehicleVersionList = new List<VehicleVersion>();
vehicleVersionList = _context.VehicleVersions.Where(m => m.VehicleModel.id == id).OrderBy(m => m.vvName).ToList(); //.Select(y => new { Id = y.id, Value = y.vmName })
vehicleVersionList.Insert(0, new VehicleVersion { id = 0, vvName = "Car Version" });
return Json(vehicleVersionList);
}
및 게시물 : 편집 형식 드롭 다운에서
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> YourEditNewCar(int id, [Bind("id,DoorsNr,isAvailable,isDamaged,isDeleted,FabricationDate,FuelTankCapacity,TrunckCapacity,OnBoardKm,SeatNr," +
"LicencePlate, VehicleBrand, VehicleModel, VehicleVersion")] Vehicle vehicle)
{
var user = await _userManager.GetUserAsync(User);
if (ModelState.IsValid)
{
try
{
_context.Update(vehicle);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!VehicleExists(vehicle.id))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction("YourCar", "Manage");
}
return View(vehicle);
}
는 다음과 같이 :
<hr>
<div class="col-md-12 text-center"><h4> Please select :</h4></div>
<div class="row row-list">
<div class="form-group col-xs-4">
<label asp-for="VehicleBrand" class="control-label hidden" value=""></label>
@Html.DropDownListFor(model => model.VehicleBrand.id, (SelectList)ViewBag.BrandList, "Car Brand", new { style = "width: 140px;", @class = "form-control" })
</div>
<div class="form-group col-xs-4">
<label asp-for="VehicleModel" class="control-label hidden" value=""></label>
@Html.DropDownListFor(model => model.VehicleModel.id, new SelectList(string.Empty), "Car Model", new { style = "width: 120px;", @class = "form-control" })
</div>
<div class="form-group col-xs-4">
<label asp-for="VehicleVersion" class="control-label hidden" value=""></label>
@Html.DropDownListFor(model => model.VehicleVersion.id, new SelectList(string.Empty), "Car Version", new { style = "width: 110px;", @class = "form-control" })
</div>
</div>
및 편집 양식에서 전대, 드롭 다운을 공급하기 위해, 즉 같다 :
<script>
$(function() {
$("#VehicleBrand_id").change(function() {
//alert("Vehicle Brand dd changed !");
var url = '@Url.Content("~/Manage/getVehicleModelById")';
var ddlsource = "#VehicleBrand_id";
$.getJSON(url, { id: $(ddlsource).val() }, function (data) {
var items = '';
$("#VehicleModel_id").empty();
$.each(data, function (i, row) {
items += "<option value='" + row.id + "'>" + row.vmName + "</option>";
});
$("#VehicleModel_id").html(items);
})
});
});
</script>
모든 드롭 다운은 완벽하게 작동하며 반환은 ID입니다.
SaveChanges를 사용하면 Vehicle 테이블에서만 저장하려고해도 탐색 속성으로 다른 항목에서도 업데이트됩니다.
_context.Update(vehicle);
await _context.SaveChangesAsync();
나는 VehicleBrands를 업데이트하기 위해 시도했지만 효과가 없습니다 :
을 간단한 것을 놓치거나 잘못된 접근입니다.
모델에 문제가 있습니다!나는 Just를 사용했다 : public VehicleBrand VehicleBrand {get; 세트; } 내가 모델에 추가 된 외래 키
로 필드 선언하지 않고 :
[외래 키 ("VehicleVersionid을")]
공공 INT VehicleVersionid {얻을; 세트; }
가 지금은 모델에 (굵게 포함) 추가 :
[외래 키 ("VehicleBrandid")]
공공 INT VehicleBrandid {얻을; 세트; }
public VehicleBrand VehicleBrand {get; 세트; }
[외래 키 ("VehicleModelid")]
공개 VehicleModelid INT {얻는다; 세트; }
public VehicleModel VehicleModel {get; 세트; }
[외래 키 ("VehicleVersionid")]
공개 INT {VehicleVersionid 얻는다; 세트; }
public VehicleVersion VehicleVersion {get; 세트; }
그리고 편집 :
[HttpPost]
[ValidateAntiForgeryToken] 작업 YourEditNewCar (INT 아이디, [바인드 ("ID, DoorsNr, isAvailable, isDamaged,으로 isDeleted, FabricationDate, FuelTankCapacity, TrunckCapacity 비동기
공개, OnBoardKm, SeatNr는 "+는 "LicencePlate는 는 VehicleBrandid, VehicleModelid는 VehicleVersionid ")] 자동차 차량) 양해
감사합니다! :) 마법처럼
작품! :)
내가 돈을 관리하고 확인하기 어려울 개체로 전체 속성을 변경 것입니다 내 모델에 없어.VehicleBrandid는 마이 그 레이션/업데이트에 대한 탐색 속성으로 데이터베이스에 생성됩니다. 제 모델의 특정 필드를 추가해야한다고 생각합니다. – CristiC777