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.ValidationMessageFor(model => model.CompetitionId)

你能评论一下吗?

于 2013-03-22T19:53:03.787 回答
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 回答