ASP.NET MVC 2 を使用して、Linq-2-SQL でマップされたデータベースからドロップダウン リストにデータを入力しようとして、このエラーが繰り返し発生します。
2 行目にtype の変数を宣言しているのですIEnumerable<SelectListItem>
が、エラーを見るとそうではないように思えます。これは非常に単純なはずだと感じますが、苦労しています。どなたか助けていただければ幸いです。
私のコントローラーの興味深い部分は次のとおりです。
public ActionResult Create()
{
var db = new DB();
IEnumerable<SelectListItem> basetypes = db.Basetypes.Select(
b => new SelectListItem { Value = b.basetype, Text = b.basetype });
ViewData["basetype"] = basetypes;
return View();
}
私の見解の中で興味深いのは次の点です。
<div class="editor-label">
<%: Html.LabelFor(model => model.basetype) %>
</div>
<div class="editor-field">
<%: Html.DropDownList("basetype") %>
<%: Html.ValidationMessageFor(model => model.basetype) %>
</div>
フォームを送信するときのPOSTアクションは次のとおりです。
// POST: /Meals/Create
[HttpPost]
public ActionResult Create(Meal meal)
{
if (ModelState.IsValid)
{
try
{
// TODO: Add insert logic here
var db = new DB();
db.Meals.InsertOnSubmit(meal);
db.SubmitChanges();
return RedirectToAction("Index");
}
catch
{
return View(meal);
}
}
else
{
return View(meal);
}
}
ありがとう。
ベストアンサー1
私も同じ問題を抱えていましたが、ついに答えを見つけました...
問題は、POST アクションで、フォームを送信した後、ModelState が有効でないか、try/catch でエラーをキャッチしているため、View が返されることです。ただし、今回は View がViewData["basetype"]
正しく設定されていません。
おそらく以前と同じコードを使用して再度入力する必要があるため、これを繰り返します。
var db = new DB();
IEnumerable<SelectListItem> basetypes = db.Basetypes.Select(
b => new SelectListItem { Value = b.basetype, Text = b.basetype });
ViewData["basetype"] = basetypes;
return View(meal)
メソッド内のの前に[HttpPost]
。
まさにこれがあなたの問題を解決します:
[HttpPost]
public ActionResult Create(Meal meal)
{
if (ModelState.IsValid)
{
try
{
// TODO: Add insert logic here
var db = new DB();
db.Meals.InsertOnSubmit(meal);
db.SubmitChanges();
return RedirectToAction("Index");
}
catch
{
var db = new DB();
IEnumerable<SelectListItem> basetypes = db.Basetypes.Select(
b => new SelectListItem { Value = b.basetype, Text = b.basetype });
ViewData["basetype"] = basetypes;
return View(meal);
}
}
else
{
var db = new DB();
IEnumerable<SelectListItem> basetypes = db.Basetypes.Select(
b => new SelectListItem { Value = b.basetype, Text = b.basetype });
ViewData["basetype"] = basetypes;
return View(meal);
}
}
この質問は非常に古いことは承知していますが、今日同じ問題でここに来たので、他の人は後でここに来るかもしれません...