ビューには ListBox があるため、ユーザーはデータを選択できます。同じ理由で MultiSelectList もあります。ユーザーは MultiSelectList から日付を選択できますが、その必要はありません (フィールドを空白のままにしておくこともできます)。そして、それはうまくいきました。ユーザーが必要に応じてデータを入力できるように、TextBox を追加することにしました。ユーザーが TextBox にデータを入力し、MultiSelectList からデータを選択しない場合、すべて問題ありません。
しかし !ユーザーが MultiSelectList からデータを選択し、TextBox を空のままにすると、次のエラーが発生します。
The ViewData item that has the key 'CompetitionId' is of type 'System.Int32' but must be of type 'IEnumerable<SelectListItem>
そして、そのエラーは LisBox に対して表示されます。
別のビュー/コントローラーでも同じ問題があります。ユーザーが画像をアップロードするオプションを有効にしました。ユーザーが画像の選択をクリックせずに画像をアップロードすると、そのビューの別の ListBox に対して同じエラーが発生します。
これを解決するのを手伝ってください。最初のコントローラー/ビューのコードは次のとおりです
コントローラ:
[Authorize]
public ActionResult Create()
{
ViewBag.Competitions = new SelectList(_competitionRepository.GetAllCompetitionsAndNotActive().AsEnumerable(),
"CompetitionId", "Name");
ViewBag.Tags = new MultiSelectList(_tagRepository.GetAllTags().AsEnumerable(), "TagId", "Name");
return View();
}
//
// POST: /Advert/Create
[HttpPost, Authorize]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(AdvertDTO advertDTO, int [] tags, int competitionId, string inputTags)
{
if (ModelState.IsValid)
{
意見:
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Advert</legend>
<div class="editor-label">
Choose Competition
</div>
<div class="editor-field">
@Html.DropDownList("CompetitionId", (SelectList)ViewBag.Competitions, new { @class = "chzn-select", data_placeholder = "Choose Competitions...", style="width:350px;" } )
@Html.ValidationMessageFor(model => model.CompetitionId)
</div>
....
@Html.ListBox("Tags", (MultiSelectList)ViewBag.Tags, new { @class = "chzn-select", data_placeholder = "Choose Tags...", style="width:350px;" })
<br/>
<label>OR</label>
<input type="text" id="inputTags" name="inputTags" style="width: 325px" />
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
編集 簡単に言えば、ユーザーが空のフィールドを送信できるようにしたい