ASP.Net Core2剃刀选择列表

时间:2018-09-25 03:52:49

标签: razor-pages

似乎在ASP.NET Core2中,具有 Razor Pages (剃刀页)的选择/下拉列表中存在与零相关的文档。

我想创建一个下拉列表,用于从另一个表中选择/显示数据。

我怀疑每个“视图”(索引,详细信息,创建和编辑)很可能需要不同的实现? 例如: 索引和详细信息(仅用于查看)页面,需要读取该字段中的值,然后从参考表中获取该关联的文本。

那里有大量与MVC相关的信息,但是Razor页面没有ViewBag。

我尝试添加

var school = _context.AdmSchool.ToList(); SelectList selectList = new SelectList(学校,“ AdmSchoolId”,“ AdmSchoolName”,null); 学校= selectList;

在create.cshtml.cs(缺少剃须刀名称的“控制器”)文件中

@Html.DropDownList("school", null, null, htmlAttributes: new{@class="form-control", placeholder="Select School"});

进入Create.cshtml(视图)文件。

那么外面有人有Razor页面的经验吗? 我必须承认我是绝对的新手,因此您的答复越详细,我就越可能理解它。 谢谢

1 个答案:

答案 0 :(得分:0)

您应该希望使用select tag helper in Razor Pages来代替MVC早期版本中的老式HTML帮助器。

asp-items属性的数据应为List<SelectListItem>

var items = _context.AdmSchool.Select(s => new SelectListItem{
                                Value = s.AdmSchoolId.ToString(), 
                                Text = s.AdmSchoolName
                                }).ToList();

您可以将其分配给PageModel(控制器)上的属性或ViewData(不是ViewBag):

ViewData["Items"] = items;

然后将其分配给asp-items属性:

<select asp-for="SelectedAdmSchoolId" asp-items="@((List<SelectListItem>)ViewData["Items"])"></select>

最后,向PageModel添加一个属性以捕获所选值:

[BindProperty]
public int SelectedAdmSchoolId {get; set;}