ASP.net MVC将一些数据从视图传递到控制器

本文关键字:视图 控制器 数据 MVC net ASP | 更新日期: 2023-09-27 18:05:17

在视图中,我有ListBox,所以用户可以选择一些数据。我也有MultiSelectList出于同样的原因。用户可以从MultiSelectList中选择一些日期,或者他不需要这样做(他可以将该字段留空)。这很有效。我决定添加TextBox,以便用户可以输入数据,如果他想。现在,当用户输入数据到文本框,不选择任何数据从MultiSelectList一切都很好。

但是!如果用户选择数据从MultiSelectList和离开文本框空,我得到这个错误:

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>

}

编辑长话短说,我希望用户能够提交空字段

ASP.net MVC将一些数据从视图传递到控制器

我觉得这行不好

 @Html.ValidationMessageFor(model => model.CompetitionId)

你能评论一下吗?

我认为你的行动实际上是张贴回所有的值从选择列表。如果你想只返回一个选定的项目,你可以尝试这样做

Html.DropDownListFor(model => model.CompetitionId, (SelectList)ViewBag.Competitions, new { @class = "chzn-select", data_placeholder = "Choose  Competitions...", style="width:350px;" } )

我已经解决了…有几个愚蠢的错误我没有发现:/抱歉给你添麻烦了