【发布时间】:2019-08-12 21:02:42
【问题描述】:
我正在尝试创建一个简单的下拉菜单,用本地数据库中的类别填充它。我正在使用 .NET Core 2.2。我正在关注一个使用早期版本的 ASP.NET MVC 的演示,他们使用 ViewBag 将列表从控制器传输到视图。出于某种原因,ViewBag 不起作用,给我一个“ViewBag 在当前上下文中不存在”的编译错误。经过一番研究后,我选择使用 ViewData,它似乎可以从控制器工作,但在显示模型中的类别名称时遇到了一些问题,因为当我运行页面时,下拉选项显示“模型。 Visportfolio.Category”而不是类别名称本身。
我对 HTML 还很陌生,所以我尝试复制演示中的代码,但我无法访问我的 Category 类的字段。根据我的研究,我尝试使用 ViewBag,ViewData 和 ViewBag 是“可互换的”,但没有运气。
我调用下拉菜单的 HTML,代码无法编译,因为它说 CategoryName 和 CategoryId 不包含定义并且没有可访问的扩展方法
<form asp-controller="my_dropdown" asp-action="CreatePortfolio" method="post" class="form-horizontal" role="form">
<div class="form-group">
<div class="row">
<div class="alert-danger" asp-validation-summary="ModelOnly"></div>
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-4">
<label asp-for="CategoryName" class="control-label"></label>
<select asp-for="CategoryId"
class="form-control"
asp-items="@(new SelectList(ViewBag.categorylist, "CategoryId", "CategoryName"))">
</select>
@Html.DropDownList("categorylist",
new SelectList((System.Collections.IEnumerable) ViewData["categorylist"]), "Select Category","CategoryName" )
</div>
</div>
</div>
<div class="form-group">
<div class="row">
<div class="col-xs-12 col-sm-6 col-lg-4">
<input id="Submit1" type="submit" value="submit" />
</div>
</div>
</div>
</form>
这是html背后的代码
public void OnGet()
{
// ----- Getting Data From Database Using EntityFrameworkCore ----
categorylist = (from category in _context.Category
select category).ToList();
// ----- Inserting Select Item in List -----
categorylist.Insert(0, new Category { CategoryId = 0, CategoryName = "Select" });
// ----- Assigning categorylist to ViewBag.ListOfCategory -----
// ViewBag.categortyList = categorylist;
ViewData["categorylist"] = categorylist;
}
型号
namespace Visportfolio.Models
{
[Table("Category")]
public class Category
{
[Key]
public int CategoryId { get; set; }
public string CategoryName { get; set; }
}
}
【问题讨论】: