在视图数据中传递名称而不是ID

时间:2019-06-10 20:19:57

标签: .net model-view-controller core

我正在.NET Core MVC上的应用程序上工作,我想在创建视图中使用导航属性“ Hobbies”的名称而不是ID

I've got this :

And I'd like that :

我设法在控制器中使用该代码进行create动作:

public IActionResult Create()
    {
        ViewData["HobbiesName"] = new SelectList(_context.Set<Hobbies>(), "HobbiesName", "HobbiesName");
        return View();
    }
        [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create([Bind("PersonID,PersonName,PersonSurname,HobbiesID")] Person person)
    {
        if (ModelState.IsValid)
        {
            _context.Add(person);
            await _context.SaveChangesAsync();
            return RedirectToAction(nameof(Index));
        }
        ViewData["HobbieName"] = new SelectList(_context.Set<Hobbies>(), "HobbiesID", "HobbiesName", person.HobbiesID);
        return View(person);
    }

在视图中:

<div class="form-group">
            <label asp-for="Hobbies.HobbiesName" class="control-label"></label>
            <select asp-for="Hobbies.HobbiesName" class ="form-control" asp-items="ViewBag.HobbiesName"></select>
        </div>

但这不起作用,因为我需要ID。 有人知道我该如何处理。我的想法不多了。

谢谢

1 个答案:

答案 0 :(得分:0)

以下内容对我有用:

<select asp-for="Name" asp-items="@Model.NameList">

在我看来的模型:

public string Name { get; set; }                   
public SelectList NameList { get; set; } 

使用视图模型最好避免使用ViewBag。 必不可少的是要有两个不同的字段:项目列表(其ID已经在后台,在后台),以及一个代表所选项目的文本(而非ID)的字段