繁体   English   中英

在MVC中,ViewData Int32必须为IEnumerable类型

[英]ViewData Int32 must be of type IEnumerable in MVC

我收到似乎无法修复的错误:

“具有键'posts.Id'的ViewData项目的类型为'System.Int32',但必须类型为'IEnumerable'。”

视图模型/ PostViewModel

namespace MyBlogger.ViewModel
{
    public class PostsViewModel
    {
        public Post posts { get; set; }
        public IEnumerable<SelectListItem> Tags { get; set; }

        private List<int> _selectedPostTags;
        public List<int> SelectedPostTags
        {
            get
            {
                if (_selectedPostTags == null)
                {
                    _selectedPostTags = posts.Tags.Select(m => m.Id).ToList();
                }
                return _selectedPostTags;
            }
            set { _selectedPostTags = value; }
        }
    }
}

PostController :(暂时手动设置ID)

public ActionResult EditPostTag(int id = 12)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }

    var postsViewModel = new PostsViewModel
    {
        posts = db.Posts.Include(i => i.Tags).First(i => i.Id == id),
    };

    if (postsViewModel.posts == null)
        return HttpNotFound();

    var tagsList = db.Tags.ToList();
    postsViewModel.Tags = tagsList.Select(o => new SelectListItem
    {
        Text = o.Name,
        Value = o.Id.ToString()
    });

    ViewBag.UserID =
            new SelectList(db.BlogUsers, "Id", "Email", postsViewModel.posts.Id);

    return View(postsViewModel);
} 

你有

@Html.DropDownListFor(m => m.posts.Id, (SelectList)ViewBag.Id, Model.posts.Id);

但您的控制器方法未将SelectList分配给名为IdViewBag属性,因此在视图中它为null,从而导致该异常。

返回视图之前,需要将ViewBag.Id的值分配给SelectList ,尽管由于使用的是视图模型,所以我建议您包括一个属性public SelectList PostsList { get; set;} public SelectList PostsList { get; set;}在您的视图模型中,并将其分配给它,并用作

@Html.DropDownListFor(m => m.posts.Id, Model.PostsList);

旁注:您不清楚当前用法的第三个参数( Model.posts.Id )在做什么(用于生成null值标签选项)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 关键字为“ JobTitleID”的ViewData项的类型为“ System.Int32”,但必须类型为“ IEnumerable” <SelectListItem> “? 具有键的ViewData项的类型为“System.Int32”,但必须是“IEnumerable”类型 <SelectListItem> “ 关键字为“ CountryId”的ViewData项的类型为“ System.Int32”,但必须类型为“ IEnumerable” <SelectListItem> “ 具有键“ CategoryId”的ViewData项的类型为“ System.Int32”,但必须类型为“ IEnumerable” <SelectListItem> &#39;? 具有键“ CategoryId”的ViewData项的类型为“ System.Int32”,但必须类型为“ IEnumerable” <SelectListItem> ”。 具有键“HousingId”的 ViewData 项的类型为“System.Int32”,但必须为“IEnumerable”类型<SelectListItem> &#39;。” :“具有键“PatientAppointmentID”的 ViewData 项的类型为“System.Int32”,但必须为“IEnumerable”类型<selectlistitem> '。'</selectlistitem> InvalidOperationException:具有键“Id”的 ViewData 项属于“System.Int32”类型,但必须属于“IEnumerable”类型<selectlistitem> '</selectlistitem> 具有键“IDMateria”的ViewData项的类型为“System.Int32”,但必须是“IEnumerable <SelectListItem>”类型 具有键“ GenderID”的ViewData项的类型为“ System.Int32”,但必须为类型“ IEnumerable” <SelectListItem> “
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM