在 MVC 中系結下拉串列時,我收到此錯誤:
InvalidOperationException:沒有具有鍵“marka”的“IEnumerable”型別的 ViewData 項。
在另一個專案中,這種語法完美地作業
SO上有幾篇關于此的帖子,但沒有一個答案似乎可以解決我目前情況下的問題。
型號:Product.cs:
public class Product
{
[Key]
public int Id { get; set; }
[Required(ErrorMessage = "Prosz? podac nazw? produktu")]
[Display(Name = "Nazwa produktu")]
[MaxLength(50, ErrorMessage = "Max 50 char")]
public string Name { get; set; }
[Display(Name = "Marka produktu")]
[Required]
[MaxLength(5, ErrorMessage = "Max 5 char")]
public string Brand { get; set; }
[Display(Name = "Cena produktu")]
[Required]
public int ProductPrice { get; set; }
[Display(Name = "Dzia?")]
[Required]
[MaxLength(1, ErrorMessage = "Max 1 char")]
public string Section { get; set; }
[Display(Name = "Materia?")]
[Required]
[MaxLength(5, ErrorMessage = "Max 5 char")]
public string Material { get; set; }
[Display(Name = "Typ")]
[Required]
[MaxLength(5, ErrorMessage = "Max 5 char")]
public string Type { get; set; }
}
品牌.cs:
public class Brand
{
[Key]
[Display(Name = "Identyfikator")]
[MaxLength(5, ErrorMessage = "Max 5 chars")]
public string Id { get; set; }
[Display(Name = "Nazwa")]
[MaxLength(50, ErrorMessage = "Max 50 chars")]
public string Name { get; set; }
}
看法:
<div class="form-group">
<label asp-for="Brand" class="control-label"></label>
<div class="col-md-5">
@Html.DropDownList("marka", "Select brand")
</div>
<span asp-validation-for="Brand" class="text-danger"></span>
</div>
控制器:
// GET: Products/Edit/5
public async Task<IActionResult> Edit(int? id)
{
if (id == null)
{
return NotFound();
}
var product = await _context.Product.FindAsync(id);
if (product == null)
{
return NotFound();
}
IEnumerable<SelectListItem> items = _context.Brand.Select(c => new SelectListItem
{
Value = c.Id,
Text = c.Name,
Selected = c.Id == product.Brand
}); ;
if (items != null)
{
ViewBag.marka = items;
}
return View(product);
}
// POST: Products/Edit/5
// To protect from overposting attacks, 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,Name,Brand,ProductPrice,Section,Material,Type")] Product product)
{
if (id != product.Id)
{
return NotFound();
}
if (ModelState.IsValid)
{
try
{
string selBra = Request.Form["marka"].ToString();
product.Brand = selBra;
_context.Update(product);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!ProductExists(product.Id))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction(nameof(Index));
}
return View(product);
}
uj5u.com熱心網友回復:
修復視圖我建議你使用選擇而不是下拉串列,它會自動選擇一個專案
<select class="form-control" asp-for="brand" asp-items="@ViewBag.marka"></select>
并通過洗掉 Selected 并添加到 List() 來修復 get 操作
var items = _context.Brand.Select(c => new SelectListItem
{
Value = c.Id,
Text = c.Name
}).ToList();
也修復 post 操作,洗掉 Bind,
public async Task<IActionResult> Edit(int id, Product product)
并從代碼中洗掉
string selBra = Request.Form["marka"].ToString();
product.Brand = selBra;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/420908.html
標籤:
