0

ビューには 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>

}

編集 簡単に言えば、ユーザーが空のフィールドを送信できるようにしたい

4

3 に答える 3

0

あなたの行動は実際に選択リストからすべての値をポストバックしていると思います。選択したアイテムのみをポストバックしたい場合は、次のようなものを試すことができます

Html.DropDownListFor(model => model.CompetitionId, (SelectList)ViewBag.Competitions, new { @class = "chzn-select", data_placeholder = "Choose  Competitions...", style="width:350px;" } )
于 2013-03-22T20:23:49.650 に答える
0

私はそれを解決しました...私が見ていなかったいくつかのばかげた間違いがありました:/すべてのトラブルをお詫びします

于 2013-03-23T19:44:40.290 に答える