これは、Contoso University のオンライン サンプルのコードです。
コントローラ:
[HttpGet]
public ActionResult Edit(int id)
{
Department department = departmentService.GetById(id);
PopulateAdministratorDropDownList(department.PersonID);
return View(department);
}
// POST: /Department/Edit/5
[HttpPost]
public ActionResult Edit(Department department)
{
try
{
if (ModelState.IsValid)
{
departmentService.Update(department);
return RedirectToAction("Index");
}
}
catch (DataException)
{
//Log the error (add a variable name after DataException)
ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem
persists, see your system administrator.");
}
PopulateAdministratorDropDownList(department.PersonID);
return View(department);
}
private void PopulateAdministratorDropDownList(object selectedAdministrator = null)
{
var administrators = instructorService.GetAll().OrderBy(i => i.LastName);
ViewBag.PersonID = new SelectList(administrators, "PersonID", "FullName",
selectedAdministrator);
}
意見:
<div class="editor-field">
@Html.DropDownList("PersonID", String.Empty)
@Html.ValidationMessageFor(model => model.PersonID)
</div>
私の質問は、ビューでViewBag.PersonIDにアクセスしていない場合(デフォルトで選択された値なしで、ID = "PersonID"のhtml選択リストを生成するDropDownListを作成するだけです)、ViewBag. PersonID プロパティはその DropDownList にバインドされていますか? 舞台裏で何が起こっているのですか?これは魔法のように見えます!!!
2 番目の質問は、データを投稿するときです。コントローラは、ID がモデル内のプロパティと一致する html フォーム フィールドをビューで検索すると思います。ビュー コードがモデルを参照しない (model => model.PersonID のようなもの) ですよね?