我正在使用ASP.NET Core 1.0和EF Core 1.0,并且在我的SQL数据库中拥有以下代码优先。
namespace GigHub.Models
{
public class Genre
{
public byte Id { get; set; }
[Required]
[StringLength(255)]
public string Name { get; set; }
}
}
我还有一个我在Razor视图窗体中使用的ViewModel类:
namespace GigHub.ViewModels
{
public class GigFormViewModel
{
public string Venue { get; set; }
public string Date { get; set; }
public string Time { get; set; }
public List<Genre> Genres { get; set; }
}
}
我也有这个控制器:
using GigHub.Data;
using GigHub.ViewModels;
using Microsoft.AspNetCore.Mvc;
namespace GigHub.Controllers
{
public class GigsController : Controller
{
private readonly ApplicationDbContext _context;
public GigsController(ApplicationDbContext context)
{
_context = context;
}
public IActionResult Create()
{
var vm = new GigFormViewModel();
// Need to get my Genre list from the DbSet<Genre> in my database context injected above
// into the GigFormViewModel for the Select taghelper to consume
return View(vm);
}
}
}
我设置了Razor视图以使用ViewModel,但我不确定如何设置下面的Select taghelper代码来访问Genre属性。
<div class="form-group">
<label asp-for="????" class="col-md-2 control-label"></label>
<div class="col-md-10">
<select asp-for="????" asp-items="????" class="form-control"></select>
<span asp-validation-for="????" class="text-danger" />
</div>
</div>
我基本上无法解决如何将我的数据库中的类型列表以Select taghelper asp-items = 可以使用的形式存入ViewModel属性。许多试验&amp;我经历过的错误扭曲通常导致转换问题从通用 List&lt;&gt; 类型转换为MVC SelectListItem 类型。我怀疑我的ViewModel类型需要调整,但到目前为止我的研究只得到了涵盖以前版本的ASP.NET和Entity Framework的文章,我很难将它们映射到ASP.NET核心1.0 RC2和EF Core 1.0。
答案 0 :(得分:1)
您可以使用asp-for
指定select元素的模型属性名称,使用asp-items
指定选项元素。
<select asp-for="SomeFiles" asp-items="Model.SomeOptions"></select>
如果您不想将ViewBag.SomeOptions
字段添加到该模式,也可以使用SomeOptions
。
有关详细信息,请查看The Select Tag Helper文档。
示例强>
视图的
<select asp-for="Country" asp-items="Model.Countries"></select>
模型
using Microsoft.AspNetCore.Mvc.Rendering;
using System.Collections.Generic;
namespace FormsTagHelper.ViewModels
{
public class CountryViewModel
{
public string Country { get; set; }
public List<SelectListItem> Countries { get; set; }
}
}
控制器的
Index方法初始化CountryViewModel
,设置所选国家/地区列表并将模型传递到Index视图。
public IActionResult Index()
{
var model = new CountryViewModel();
model.Country = "CA";
model.Countries = db.Countries
.Select(x => new SelectListItem { Value = x.Id, Text = x.Name })
.ToList();
return View(model);
}