2016-10-26 5 views
0

プロジェクト全体でドロップダウンリストに入力するIDとラベルで構成されるテーブルがあります。Entity Frameworkコアを使用してモデル間でドロップダウン値テーブルを使用および共有する方法

public class Office 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public string StreetAddress { get; set; } 
    public int CityID { get; set; } 
} 

私は私のコントローラの都市の私のリストを取得する方法を知っている:都市のリストを参照するために、私は私のオフィスのモデルをしたいと思います

public class Cities 
{ 
    public int CityID { get; set; } 
    public string CityName { get; set; } 
} 

:この例では、私は都市のリストを使用しています

public async Task<IActionResult> Edit(int? id) 
{ 
    var office = await _context.Offices.SingleOrDefaultAsync(m => m.OfficeID == id); 
    var getCities = _context.Cities.ToList(); 
    ViewBag.citylist = new SelectList(getCities, "CityID", "CityName"); 
    return View(office); 
} 

ViewBagを使用すると、リストを作成するためのエレガントで適切な方法とは思えませんが、機能します。

私がオフィスのレコードを作成または更新すると、更新中のレコードに市のIDが正しく格納されます。しかし、私はオフィスの記録を見ると、私は市のIDにしかアクセスできません。 市のIDを使って市の名前にアクセスして表示する方法がわかりません。オフィスの記録に保存されているcityIDを使用してCitiesテーブルから都市名にアクセスするにはどうすればよいですか?

このようなものを使用して、必要なすべての情報にアクセスすることが好ましいと思われる:

var offices = await _context.Offices 
    --> .PseudoCode.GetTheCityNameFromTheID() <--- 
    .ToListAsync(); 

しかし、私が作成し、多対1の関係のこの種を(使用する方法がわかりませんか? )を使用して、Entity Frameworkコアを使用します。私は、各オフィスの記録に一致する都市価値が1つしかないことを知っています。

また、同じ都市リストを使用して、ユーザープロファイルなど他のモデルの都市情報を入力する場合はどうすればよいですか?

プレコアバージョンのEFの例がありますが、構文が新しいコア構文と相関していないようです。

[ForeignKey("bar")][InverseProperty("foo")]などのデータアノテーションを使用しようとしましたが、これが正しいアプローチであるとは確信していません。

答えて

0

私は答えを見つけたと思います。 ForeignKey属性を設定するために、データアノテーションを使用し、ドロップダウンリストのテーブルを参照するモデル、およびvirtualクラスでは:

public class Office 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public string StreetAddress { get; set; } 
    [ForeignKey("Cities")] 
    public int CityID { get; set; } 
    public virtual Cities cities { get; set; } 
} 

これは、Officeのモデルは、都市モデルの値にアクセスできるようになります:

このようなあなたのコントローラで
public class Cities 
{ 
    public int CityID { get; set; } 
    public string CityName { get; set; } 
} 

は、:

var offices = await _context.Offices 
    .Include(cityname => cityname.cities) 
    .ToListAsync(); 

次に、あなたのビューで、あなたは、ARに関連付けられている都市名を表示することができますエコードの市区町村ID:

@Html.DisplayFor(modelItem => item.cities.CityName) 

少なくともこれは私の期待通りです。誰かがより良い方法を持っている場合、私はそれについて知りたいと思う、ViewBagよりもエレガントな方法があるかどうか私はまだわからない、都市テーブルの内容をドロップダウンリストに移入する。

+0

[ViewBagが選択リストの内容を渡す最善の方法であるかどうかの答えは、[ASP。net form documentation](https://docs.asp.net/en/latest/mvc/views/working-with-forms.html) "Select Tag HelperでViewBagまたはViewDataを使用することはお勧めしません。 MVCメタデータを提供する際にはより堅牢で、一般的には問題は少ない」 –

関連する問題