私はStackOverflowを読んでいますが、実際にはこれを手助けすることはできませんでした。私はいくつかのモデルのフィールドのためのSelectListsを持っているポジションモデルに取り組んでいますが、試行して保存するたびにエラーが発生します:'CompanyID'というキーを持つ 'IEnumerable <SelectListItem>'タイプのViewDataアイテムはありません
"システムで 'System.InvalidOperationException' .Web.Mvc.dllでは処理されませんでしたが、ユーザーコードでは処理されませんでした。
追加情報: 'CompanyID'というキーを持つ 'IEnumerable'タイプのViewDataアイテムはありません。
ここに私の見解から該当するコードです:
コントローラ/ PositionController:
ビュー/ポジション/ Create.cshtml
<div class="form-group">
<label class="control-label col-md-2">Company</label>
<div class="col-md-10">
@Html.DropDownList("CompanyID", (SelectList)ViewBag.AllCompanies, new { @class = "form-control" })
</div>
</div>
はここに私のコントローラから該当するコードです。 cs
// GET: /Position/Create
public ActionResult Create()
{
//create query to find all committees
var query = from m in db.Majors
orderby m.Major
select m;
//execute query and store in list
List<Majors> allMajors = query.ToList();
//convert list to select list format needed for HTML
SelectList allMajorsList = new SelectList(allMajors, "MajorID", "Major");
ViewBag.AllMajors = allMajorsList;
//create query to find all committees
var query2 = from c in db.Companies
orderby c.CompanyName
select c;
//execute query and store in list
List<Company> allCompanies = query2.ToList();
//convert list to select list format needed for HTML
SelectList allCompaniesList = new SelectList(allCompanies, "CompanyID", "CompanyName");
ViewBag.AllCompanies = allCompaniesList;
//create query to find all committees
var query3 = from i in db.Industries
orderby i.IndustryName
select i;
//execute query and store in list
List<Industry> allIndustries = query3.ToList();
//convert list to select list format needed for HTML
SelectList allIndustriesList = new SelectList(allIndustries, "IndustryID", "IndustryName");
ViewBag.AllIndustries = allIndustriesList;
return View();
}
// POST: /Position/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include="PositionID,PositionTitle,PositionType,PositionLocation,PositionDeadline,PositionDescription")] Position position, int[] SelectedMajors, Int32 CompanyID, Int32 IndustryID)
{
//find selected committee
Company SelectedCompany = db.Companies.Find(CompanyID);
Industry SelectedIndustry = db.Industries.Find(IndustryID);
//associate committee with event
position.PositionCompany = SelectedCompany;
position.PositionIndustry = SelectedIndustry;
if (ModelState.IsValid)
{
//if there are majors to add, add them
if (SelectedMajors != null)
{
foreach (int MajorId in SelectedMajors)
{
Majors majorToAdd = db.Majors.Find(MajorId);
position.ApplicableMajors.Add(majorToAdd);
}
}
db.Positions.Add(position);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(position);
}
私が間違っていることを理解できないようです。どんな助けでも大歓迎です!
にあなたのポストのアクションを変更
にあなたのGETアクションを変更します'ViewBag.AllCompanies'の名前を' ViewBag.CompanyID'に変更してください – DCruz22
@ DCruz22ちょうど試しました - 同じエラーが発生しましたまたは:/ –
強い形式のビューを使用しない理由は何ですか? – DCruz22