最初に、このサイトで以前に何度も取り上げられたトピックを取り上げて申し訳ありませんが、コードを機能させることができません。
次のモデル クラスがあります。
public class ProjectsTable {
public int ID {get; set;}
public String ProjectName {get; set;}
...
public virtual Manager Manager_Id {get; set;} // Stores foreign key of Manager
}
public class Manager {
public int ID {get; set;}
public String ManagerName {get; set;}
...
public virtual ICollection<ProjectsTable> Projects {get; set;}
}
ProjectsTable Controller クラスには、表示および編集ページとしても機能する次のメソッドが含まれています。
private SynthContext db = new SynthContext();
...
// GET: /ProjectsTable/Parameters/5
public ActionResult Parameters(int id) {
ProjectsTable projectstable = db.ProjectsTable.Find(id);
ViewBag.Manager_Id = new SelectList(db.Manager, "ID", "ManagerName");
return View(projectstable);
}
// POST: /ProjectsTable/Parameters/5
public ActionResult Parameters(ProjectsTable projectstable) {
if(ModelState.IsValid) {
db.Entry(projectstable).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Parameters");
}
ViewBag.Manager_Id = new SelectList(db.Manager, "ID", "ManagerName");
return View(projectstable);
}
最後に、Parameters.cshtml には、ドロップダウンを表示する次のコードが含まれています。
@model Synth.Models.ProjectsTable
...
<fieldset>
...
<div class="editor-lable">
@Html.LabelFor(model => model.Manager_ID)
</div>
<div class="editor-field">
@HTML.DropDownList("Manager_ID", String.Empty)
</div>
<input type="submit" value="Update">
</fieldset>
コードをテストすると、/ProjectsTable/Parameters/x
問題なく移動できます。マネージャー名のリストを含むドロップダウンが正しく生成されます。ただし、[更新] ボタンをクリックすると、Manager_ID が赤色で強調表示され、変更が登録されていないことが示されます。変更が反映されていない場所に移動することで、変更が登録されていないことを確認できます/ProjectsTable/list
。
を追加しようとしまし@Html.ValidationMessageFor(Model.Manager_ID)
たが、結果は常に「値 'x' は無効です」です。ここで、x は有効な ID 値です (データベースに対して確認しました)。
生成された HTML ソースを確認しましたが、どこにも問題はありません。
に置き換える必要があるのではないかと疑って@HTML.DropDownList
い@HTML.DropDownListFor
ますが、機能させるために必要なパラメーターがわかりません。
編集 - 私は今、うまくいくようになりDropDownListFor
ましたが、問題は解決しません。この問題を解決するのに役立つ関連する質問は、サーバーに送り返された投稿データを表示する方法かもしれません。
どんな助けでも大歓迎です。
皆様、これからよろしくお願いします…
チョポ