创建下拉列表asp.net核心

时间:2017-06-03 14:10:13

标签: c# asp.net .net razor mvvm

我有两种视图模型:

public class PersonViewModel
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime Dob { get; set; }
    public string Email { get; set; }
    public ICollection<PetViewModel> Pets { get; set; }
}

public class PetViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int PersonId { get; set; }
    public PersonViewModel Person { get; set; }
}

在创建/编辑宠物时,我想要一个可供选择的所有人的下拉列表。这是我的宠物控制器:

\\ Other methods omitted for brevity

    [HttpGet]
    public IActionResult Create()
    {
        var people = _personService.AsQueryable().ToList();
        ViewBag.PeopleList = new SelectList(people , "Id", "FirstName");
        return View();
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public IActionResult Create([Bind("Id,Name,PersonId")] PetViewModel vm)
    {
        if (!ModelState.IsValid) return View(vm);
        var pet = _petService.Create(vm.Name, vm.PersonId);
        return RedirectToAction("Details", pet);
    }

我试图通过ViewBag这样做并在视图中执行以下操作:

@model UI.ViewModels.PetViewModel

<h2>Create</h2>

<form asp-action="Create">
  <div class="form-horizontal">
  <h4>Create a Pet</h4>
   <div class="form-group">
        <label asp-for="PersonId" class="col-md-2 control-label"></label>
        <div class="col-md-10">
            @Html.DropDownListFor(model => model.PersonId, ViewBag.PeopleList, "--Select--", new { @class = "form-control"})
            <span asp-validation-for="PersonId" class="text-danger"></span>
        </div>
    </div>
  </div>
</form>

尝试这样做时,我收到以下错误:Cannot use a lambda expression as an argument to a dynamically dispatched operation without first casting it to a delegate or expression tree type.

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:2)

我设法通过执行以下操作来修复它:

<div class="form-group">
        <label asp-for="PersonId" class="col-md-2 control-label"></label>
        <div class="col-md-10">
            @Html.DropDownListFor(model => model.PersonId, (SelectList)ViewBag.PeopleList, "--Select--", new { @class = "form-control"})
            <span asp-validation-for="PersonId" class="text-danger"></span>
        </div>
    </div>

我没有将ViewBag.PeopleList转换为SelectList,将Html.DropDownList中的第二个参数更改为(SelectList)ViewBag.PeopleList为我解决了问题。

相关问题