0
做的創建和更新一對多對象的動作
正確方法我正在我的第一對.NET核心應用程序,我能夠把一起爲我的第一個表的CRUD操作。在.net核心Ef中的核心
第二個表有一個外鍵第一個表,我想我已經在努力放在一起創建和更新行動關閉了在錯誤的道路上。更新操作需要傳入外鍵表中的所有項目以供用戶選擇。但作爲一個更新操作,查看需要具有從下拉列表中選擇外鍵的實際對象。
這樣做的正確方法是什麼?我似乎無法在Google上找到一致的答案。
表1型號:
public class HTMLElement
{
public int Id { get; set; }
public string Element { get; set; }
public string ElementName { get; set; }
public virtual ICollection<CustomizedElement> CustomizeHTMLElements { get; set; }
}
表2型號:
public class CustomizedElement
{
public int Id { get; set; }
public string Name { get; set; }
public int? HTMLElementId { get; set; }
public HTMLElement HTMLElement { get; set; }
}
視圖模型爲表二:
public class CustomizedHTMLElementViewModel
{
[Display(Name = "Name")]
public string Name { get; set; }
[Display(Name = "HTML Element")]
public int HTMLElement { get; set; }
[Display(Name = "HTML Elements")]
public ICollection<HTMLElement> HTMLElements { get; set; }
}
創建控制器:
我想通過在所有的項目從表1成,用戶可以從中選擇這個工作,但不知道這是否是這樣做的正確方法下拉列表的視圖。
[HttpGet]
public IActionResult AddCustomizedHTMLElement()
{
var elements = new CustomizedHTMLElementViewModel
{
HTMLElements = db.HTMLElements.ToList()
};
return View(elements);
}
郵政行動正在工作,但不知道它是否是最有效的。
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult AddCustomizedHTMLElement(CustomizedHTMLElementViewModel CHTMLEV)
{
if (ModelState.IsValid)
{
var element = db.HTMLElements.Single(e => e.Id == CHTMLEV.HTMLElement);
CustomizedElement cElement = new CustomizedElement()
{
Name = CHTMLEV.Name,
HTMLElement = element,
};
db.CustomizedElements.Add(cElement);
db.SaveChanges();
return RedirectToAction("CustomizedHTMLElements");
}
return View(CHTMLEV);
}
我在更新操作中遇到困難。我想在所有的外鍵通過,但也有在下拉列表中選擇在視圖
[HttpGet]
public IActionResult UpdateCustomizedHTMLElement(int Id)
{
var mElement = db.CustomizedElements.Include(e => e.HTMLElement).FirstOrDefault(e => e.Id == Id);
ViewBag.ElementsList = db.HTMLElements.ToList();
return View(mElement);
}
我還沒有更新的動作[HttpPost]工作還沒有,直到我得到的視圖外鍵對象對。
更新視圖:
<form method="post" asp-controller="Templates" asp-action="UpdateCustomizedHTMLElement">
<div class="form-group">
<label asp-for="Name"></label>:
<input class="form-control form-control-sm" type="text" asp-for="Name" />
<span class="text-danger" asp-validation-for="Name"></span>
</div>
<div class="form-group">
<label asp-for="HTMLElement"></label>:
@Html.DropDownListFor(m => m.HTMLElement, new SelectList(ViewBag.ElementsList, "Id", "Element"), new { @class = "form-control" })
<span class="text-danger" asp-validation-for="HTMLElement"></span>
</div>
<div>
<button class="btn btn-primary" type="submit" value="Submit">Save</button>
<button class="btn btn-secondary" type="button" value="Cancel" onclick="location.href='@Url.Action("CustomizedHTMLElements", "Templates")'">Cancel</button>
</div>
</form>
這是更新作爲評論更合適。當你有代表時,考慮評論。如果您想回答這個問題,請提供完整的答案。 –