0

次のように定義された2つのモデルがあります。

public class Division
{
    public int DivisionID { get; set; }
    [Required]
    public string DivisionName { get; set; }
    public virtual Employee Contact{ set;get; }
    public virtual ICollection<Employee> Employees { get; set; }
}

public class Employee
{
  public int EmployeeID{ get; set; }
  public string Name{ get; set; }
  public virtual Division Division{set;get;}
}

エンティティフレームワークは、という部門テーブルにフィールドを設定しemployee_employeeidます。部門テーブルの連絡先属性の従業員のドロップダウンを作成するにはどうすればよいですか。

これが私が試したことですが、データベースには何も送信されていません。

ViewBag.contact = new SelectList(db.Employees,"EmployeeID","Name");

私が持っているビューで:

@Html.DropDownList("contact",String.Empty)

使用しなければならない命名規則はありますか?

編集

POST アクション:

[HttpPost]
public ActionResult Edit(Division division)
{
    if (ModelState.IsValid)
    {
        db.Entry(division).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    ViewBag.employeeid = new SelectList(
        db.Employees, "EmployeeID", "EmployeeFirstName", division.employee);

    return View(division);
}
4

2 に答える 2

0

ViewDataViewBag の代わりに実際に使用することをお勧めします。コントローラーには次のものがあります。

var employees = db.Employees.Select(e => new DropDownItem{ Text = e.Name, Value = e.EmployeeID });
ViewData["Employees"] = employees;

次に、ビューで次のように表示します。

@Html.DropDownList("Contact", ((IEnumerable<DropDownItem>)(ViewData["Employees"])))
于 2013-03-04T21:55:57.630 に答える
0

モデルで外部キー プロパティを公開することをお勧めします。これにより、ドロップダウン リストへのバインドとその後の更新がはるかに簡単になります。モデルDivisionは次のようになります。

public class Division
{
    public int DivisionID { get; set; }
    [Required]
    public string DivisionName { get; set; }
    [ForeignKey("Contact")]
    public int ContactId { set;get; }
    public virtual Employee Contact { set;get; }
    public virtual ICollection<Employee> Employees { get; set; }
}

次に、Edit GET アクションで、次のように入力ViewBagします。

ViewBag.Contacts = new SelectList(
    db.Employees, "EmployeeID", "Name", division.ContactId);

Divisionas モデルで厳密に型指定されたビューがあります。

@model MyNamespace.Division

ContactIdこのビューでは、ドロップダウン リストをプロパティにバインドできます。

@Html.DropDownListFor(model => model.ContactId, ViewBag.Contacts)

POST アクションは、現在のバージョンに似ている可能性があります。

[HttpPost]
public ActionResult Edit(Division division)
{
    if (ModelState.IsValid)
    {
        db.Entry(division).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    ViewBag.Contacts = new SelectList(
        db.Employees, "EmployeeID", "Name", division.ContactId);

    return View(division);
}

多くの場合、(特にセキュリティ上の理由から) ビューにデータベース エンティティの代わりに特別な ViewModel を使用することをお勧めします。Contactsその後、 ( を使用する代わりに) コレクションを ViewModel に組み込むことができますViewBag。データベース内のエンティティを更新するには、エンティティをロードし、変更されたプロパティを ViewModel からエンティティに書き込んで保存します。

于 2013-03-05T18:38:10.893 に答える