微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

具有键“ HousingId”的ViewData项的类型为“ System.Int32”,但必须类型为“ IEnumerable <SelectListItem>”

如何解决具有键“ HousingId”的ViewData项的类型为“ System.Int32”,但必须类型为“ IEnumerable <SelectListItem>”

我有一个正在使用的MVC应用程序。我有一个工作正常的应用程序创建视图。但是我想创建一个局部视图,以便可以在索引中调用它。但是,该部分视图会抛出

system.invalidOperationException:“具有键“ HousingId”的ViewData项的类型为“ system.int32”,但必须类型为“ IEnumerable”

在此代码行上:

@Html.DropDownList("HousingId",(IEnumerable<SelectListItem>)ViewBag.Housings,htmlAttributes: new { @class = "form-control" })

但是,该行代码在正常的“创建”视图中工作正常。这是我的控制器:

public ActionResult Create()
{
    var housings = new SelectList(_db.Housings.ToList(),"HousingId","Name");
    ViewBag.Housings = housings;
    return View();
}

我想念什么?

编辑:这是我传递部分内容的方式

@model IEnumerable<Housing_RedBadgeMVC.Models.ApplicationModels.ApplicationListItem>

...

@foreach (var item in Model)
{
    <div class="create-housing-container">
        <p style="color: white; font-size: 12px;">
            Here you can view current applications for specific housing,if you'd like to fill out an application please click
            @Html.Partial("_ApplicationCreate",item)
        </p>
    </div>
}

...

部分内容是什么

@model Housing_RedBadgeMVC.Models.ApplicationModels.ApplicationListItem

...

@using (Html.BeginForm("Create","Application",new { id = Model.HousingId }))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true,"",new { @class = "text-danger" })

    <div class="form-group">
        @Html.LabelFor(model => model.HousingId,"Housing",htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownList("HousingId",htmlAttributes: new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.HousingId,new { @class = "text-danger" })
        </div>
    </div>
}

...

解决方法

它说Dropdownlist必须是List,在这里您只是传递单个对象,例如var

更改此:

var housings = new SelectList(_db.Housings.ToList(),"HousingId","Name");

IEnumerable<SelectListItem> housings = new SelectList(_db.Housings.ToList(),"Name");

编辑

尝试一下:

IEnumerable<SelectListItem> housings = db.Housings.Select(
    b => new SelectListItem { Value = b.HousingId,Text = b.Name}).ToString();
ViewBag.Housings = housings;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。