私のアプリケーションでは、さまざまな選択肢を表すドロップダウンリストがあります。 Paragraph
はモデルであり、セクションはモデル内の1つのフィールドにすぎないことに注意してください。MVC 3モデルにバインドしないドロップダウンリスト
@Html.DropDownList("Sections")
これは私のコントローラです。
public ActionResult Edit(int id)
{
var paragraph = db.Paragraphs.Find(id);
ViewBag.Sections = new SelectList(
db.Sections.Select(s => new { s.ID, s.Name }),
"ID", "Name", paragraph.SectionID
);
return View(paragraph);
}
[HttpPost]
public ActionResult Edit(Paragraph paragraph, HttpPostedFileBase document)
{
if (ModelState.IsValid)
{
// Do some stuff.
}
ViewBag.Sections = new SelectList(
db.Sections.Select(s => new { s.ID, s.Name }),
"ID", "Name", paragraph.SectionID
);
return View(paragraph);
}
ドロップダウンリストはモデルにバインドされていませんが、フォームを送信すると、 ModelState.IsValid
が偽であり、私の人生が恐ろしいものになってしまった。助言がありますか?
EDIT:
There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'Sections'.
EDIT:私がファイルを送信しようとすると、私は前のエラーを取得することが表示されます私は、私は次のエラーを取得するフォームを送信します。
EDIT:モデル
public class Paragraph
{
public int ID { get; set; }
[Required]
public int Major { get; set; }
[Required]
public int Minor { get; set; }
[Required(ErrorMessage = "Name is required")]
[StringLength(4000)]
public string Name { get; set; }
public int SectionID { get; set; }
public virtual Section Section { get; set; }
}
フォーム:(。それはたくさんだ)あなたが強くHtml.TextBoxForなどのようなヘルパーを入力し使用していない理由を
<form class="form-horizontal" action="/Paragraph/Edit" method="post" enctype="multipart/form-data">
<fieldset>
<div class="control-group">
<label class="control-label" for="section">Section</label>
<div class="controls">
@Html.DropDownList("Sections")
</div>
</div>
<div class="control-group">
<label class="control-label" for="major">Major</label>
<div class="controls">
<input type="number" class="input-large" name="major" value="@Model.Major" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="minor">Minor</label>
<div class="controls">
<input type="number" class="input-large" name="minor" value="@Model.Minor" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="name">Name</label>
<div class="controls">
<input type="text" class="input-large" name="name" value="@Model.Name" />
</div>
</div>
<div class="control-group">
<label class="control-label" for="document">Document</label>
<div class="controls">
<input type="file" class="input-file" name="document" />
</div>
</div>
<div class="form-actions">
<input type="submit" class="btn btn-primary" value="Save" />
<a class="btn" href="/Paragraph/Show/@Model.ID">Cancel</a>
</div>
</fieldset>
</form>
ViewModelsと強く型付けされたヘルパーを使用するのが一般的です。あなたがそれを整理してうれしいです。 – GraemeMiller