0

以下のように、別のクラスとの関係を持つモデル クラスがあります。

public class Client
{
    public int ID { get; set; }
    [StringLength(30, ErrorMessage = "Client name cannot be longer than 30 characters.")]
    public string Name { get; set; }
    public virtual Industry Industry { get; set; }
    [Display(Name="Head Office")]
    public string HeadOffice { get; set; }
}

public class Industry
{
    public int ID { get; set; }
    [StringLength(30, ErrorMessage = "Industry name cannot be longer than 30 characters.")]
    [Display(Name="Industry")]
    public string Name { get; set; }
}

最終的な目標は、クライアント CRUD ビューで Industry.Name を選択したり、編集/作成時にそれを割り当てたりできるようにすることです。

コントローラーで以下を使用して、ドロップダウンリストのデータを選択できました。

private void PopulateIndustriesDropDownList(object selectedIndustry = null)
{
    var industriesQuery = from i in _context.Industry
                          orderby i.Name
                          select i.Name;
    ViewBag.Industries = new SelectList(industriesQuery, "Industry", "Name", selectedIndustry);
}

そして、各コントローラー関数に次のものがあります。

// GET: Clients/Create
public IActionResult Create()
{
    PopulateIndustriesDropDownList();
    return View();
}

// POST: Clients/Create
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Create(Client client)
{
    if (ModelState.IsValid)
    {
        _context.Client.Add(client);
        _context.SaveChanges();
        return RedirectToAction("Index");
    }
    PopulateIndustriesDropDownList();
    return View(client);
}

すべてが正常に機能しているように見えますが、これを自分のビューにバインドする方法がわかりません。タグ ヘルパーを使用するのはこれが初めてで、構文が正しくないと確信しています。

<div class="form-group">
    <label asp-for="Industry.Name" class="col-md-2 control-label"></label>
    <div class="col-md-10">
        <select asp-for="Industry.ID" asp-items="ViewBag.Industries" class="form-control"></select>
    </div>
</div>

Edit 関数を呼び出すと、エラーは発生しませんが、ドロップダウン リストには何も入力されません。

誰かが私が間違っているところを指摘できますか?

4

2 に答える 2

0

選択タグ ヘルパーは、IEnumerable<SelectListItem> PopulateIndustriesDropDownList メソッドをリファクタリングすることを期待しています。

ViewBag.Industries = new SelectList(industriesQuery, "Industry", "Name", selectedIndustry).Items;

またはビューでキャストを行い、

于 2017-01-12T20:06:55.033 に答える
0

私が見る限り (確かではありませんが)、asp-items="ViewBag.Industries" の代わりに asp-items="@ViewBag.Industries" を配置する必要があります。ここに詳細な説明があると思います: ASP.NET Core MVC でタグヘルパーを選択してください

于 2016-04-02T07:48:25.153 に答える