简体   繁体   English

传递到字典中的模型项是视图模型类型,但需要通用IEnum

[英]The model item passed into the dictionary is of type view model but requires generic IEnum

Something catastrophic has happened to my application. 我的应用程序发生了灾难性的事情。 Every details page has started saying: 每个详细信息页面都开始说:

The model item passed into the dictionary is of type 'MyBlogger.Models.PostViewModel', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[MyBlogger.Models.Post]'. 传递到字典中的模型项的类型为“ MyBlogger.Models.PostViewModel”,但是此字典需要类型为“ System.Collections.Generic.IEnumerable`1 [MyBlogger.Models.Post]”的模型项。

It was fine one minute and the next it started doing this, Every single details page is doing it with some variation on the dictionary type. 一分钟没事,然后下一个开始,每个详细信息页面都在字典类型上做一些变化。

The pages I was navigating to was http://localhost:52202/Post/MainDetails/test-upload , http://localhost:52202/Post/Details/qwdqwdw etc etc 我导航到的页面是http://localhost:52202/Post/MainDetails/test-uploadhttp://localhost:52202/Post/Details/qwdqwdw

The controller action for example for the first link is this: 例如,第一个链接的控制器操作是这样的:

namespace MyBlogger.Controllers
{
    public class PostController : Controller
    {
        private BlogEntities db = new BlogEntities();
        //public Tag tags = new Tag();
        //
        // GET: /Post/
        [Authorize]
        public ActionResult Index()
        {
            Dictionary<int, string> postImages = new Dictionary<int, string>();
            var posts = db.Posts.Where(p => p.BlogUserEmail == User.Identity.Name).Include(p => p.BlogUser).Include(p => p.Category);
            foreach (var item in posts)
            {
                byte[] buffer = item.Picture;
                postImages.Add(item.Id, Convert.ToBase64String(buffer));
            }
            ViewBag.Images = postImages;
            return View(posts.ToList());
        }
        //
        // GET: /Post/Details/5
        //[Authorize]
        public ActionResult Details(string urlslug)
        {
            Post post = db.Posts.First(m => m.UrlSlug == urlslug);
            byte[] buffer = post.Picture;
            ViewBag.ImageToShow = Convert.ToBase64String(buffer);
            if (post == null)
            {
                return HttpNotFound();
            }
            return View(post);
        }
        public ActionResult MainDetails(string urlslug)
        {
            Post post = db.Posts.First(m => m.UrlSlug == urlslug);
            List<Post> posts = db.Posts.ToList();

            byte[] buffer = post.Picture;
            ViewBag.ImageToShow = Convert.ToBase64String(post.Picture);

            PostViewModel model = new PostViewModel
            {
                CurrentPost = post,
                Posts = posts
            };

            if (post == null)
            {
                return HttpNotFound();
            }

            return View(model.Posts);
        }

The PostViewModel is this: PostViewModel是这样的:

namespace MyBlogger.Models
{
    public class PostViewModel
    {
        public Post CurrentPost { get; set; }
        public IEnumerable<Post> Posts { get; set; }
        public Tag CurrentTag { get; set; }
        public IEnumerable<SelectListItem> Tags { get; set; }
        private List<int> _selectedPostTags;
        public List<int> SelectedPostTags
        {
            get
            {
                if (_selectedPostTags == null)
                {
                    _selectedPostTags = CurrentPost.Tags.Select(m => m.Id).ToList();
                }
                return _selectedPostTags;
            }
            set { _selectedPostTags = value; }
        }
    }
}

The MainDetails view: MainDetails视图:

@model MyBlogger.Models.PostViewModel

@{
    ViewBag.Title = "MainDetails";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>@Html.DisplayFor(model => model.CurrentPost.Title)</h2>

<header class="intro-header">
    <div class="container">
        <div class="row">
            <div>
                <div class="post-heading">
                    @*<a href="#">*@
                    <img class="img-responsive" src="@Html.Raw("data:image/jpeg;base64," + ViewBag.ImageToShow)" alt="">

                        <h1>@Html.DisplayFor(model => model.CurrentPost.ShortDescription)</h1>
                    <p class="text-left">Posted by <a href="#">@Html.DisplayFor(model => model.CurrentPost.BlogUserEmail)</a> on @Html.DisplayFor(model => model.CurrentPost.PostedOn)</p>
                    <p class="text-left">Category <a href="#">@Html.DisplayFor(model => model.CurrentPost.Category.Name)</a></p>

                    @*</a>*@
                </div>
            </div>
        </div>
    </div>
</header>

<fieldset>
    <div class="display-field">
        @*@Html.DisplayFor(model => model.BlogUserEmail)*@
    </div>

    <div class="display-field">
        @Html.Raw(HttpUtility.HtmlDecode(Model.CurrentPost.Description))
    </div>

    <div class="display-field">
        @Html.DisplayFor(model => model.CurrentPost.Modified)
    </div>
</fieldset>
@Html.Partial("SimilarPosts", Model.Posts)

Nothing seems wrong with this why has my entire application started giving these errors? 这似乎没有错,为什么我的整个应用程序都开始出现这些错误?

Stack Trace: 堆栈跟踪:

    [InvalidOperationException: The model item passed into the dictionary is of type 'MyBlogger.Models.PostViewModel', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[MyBlogger.Models.Post]'.]
   System.Web.Mvc.ViewDataDictionary`1.SetModel(Object value) +585831
   System.Web.Mvc.ViewDataDictionary..ctor(ViewDataDictionary dictionary) +371
   System.Web.Mvc.WebViewPage`1.SetViewData(ViewDataDictionary viewData) +48
   System.Web.Mvc.WebViewPage.ConfigurePage(WebPageBase parentPage) +60
   System.Web.WebPages.<>c__DisplayClass7.<RenderPageCore>b__6(TextWriter writer) +218
   System.Web.WebPages.HelperResult.WriteTo(TextWriter writer) +10
   System.Web.WebPages.WebPageBase.Write(HelperResult result) +71
   System.Web.WebPages.WebPageBase.RenderSurrounding(String partialViewName, Action`1 body) +64
   System.Web.WebPages.WebPageBase.PopContext() +246
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +95
   System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +258
   System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +115
   System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +295
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13
   System.Web.Mvc.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17() +23
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +242
   System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +21
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +177
   System.Web.Mvc.Async.<>c__DisplayClass2a.<BeginInvokeAction>b__20() +89
   System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +102
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +57
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +43
   System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +14
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +57
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +47
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
   System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +25
   System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +23
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +47
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9658396
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

This error 这个错误

[InvalidOperationException: The model item passed into the dictionary is of type 'MyBlogger.Models.PostViewModel', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[MyBlogger.Models.Post]'.] [InvalidOperationException:传递到字典中的模型项的类型为'MyBlogger.Models.PostViewModel',但是此字典需要模型'System.Collections.Generic.IEnumerable`1 [MyBlogger.Models.Post]'的模型。

means that one of your views (either a regular view, partial view, maybe even your layout) is declaring it's model type to be IEnumerable<MyBlogger.Models.Post> but the data that is being passed to it is a PostViewModel. 意味着您的一个视图(常规视图,局部视图,甚至您的布局)都声明其模型类型为IEnumerable <MyBlogger.Models.Post>,但是传递给它的数据是PostViewModel。

I'd look at your layout view or any shared partial views if this just "suddenly stopped working" and it's impacting a lot of pages. 如果这只是“突然停止工作”并且会影响很多页面,那么我将查看您的布局视图或任何共享的局部视图。

暂无
暂无

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

相关问题 传递到字典中的模型项的类型为,但是此字典需要类型为&#39;System.Collections.Generic.IEnumerable的模型项。 - The model item passed into the dictionary is of type , but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 传递到字典中的模型项的类型为&#39;System.Collections.Generic.List,但是此字典需要类型为的模型项 - model item passed into the dictionary is of type 'System.Collections.Generic.List, but this dictionary requires a model item of type 传递到字典中的模型项属于类型,但此字典需要类型为“System.Collections.Generic.IEnumerable”的模型项 - The model item passed into the dictionary is of type, but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 传递到字典中的模型项的类型为 ,但此字典需要类型为“System.Collections.Generic.IEnumerable”的模型项 - The model item passed into the dictionary is of type , but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 传递到字典中的模型项是类型,但是此字典需要类型为&#39;System.Collections.Generic.IEnumerable&#39;的模型项。 - The model item passed into the dictionary is of type, but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable` 传递到字典中的模型项的类型为“”,但是此字典需要模型类型为“”的模型项 - The model item passed into the dictionary is of type ' ', but this dictionary requires a model item of type ' ' 传递给字典的 model 项是类型的.. 但是这个字典需要一个 model 类型的项 - The model item passed into the dictionary is of type .. but this dictionary requires a model item of type 传递到字典中的模型项的类型为``,但是此字典需要类型为&#39;System.Collections.Generic.IEnumerable&#39;的模型项 - The model item passed into the dictionary is of type '` but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable' 传递到字典中的 model 项是类型.. 但此字典需要 System.Collections.Generic.IEnumerable' 类型的 model 项 - The model item passed into the dictionary is of type .. but this dictionary requires a model item of type System.Collections.Generic.IEnumerable' 传递到字典中的模型项的类型为......,但此字典需要... - The model item passed into the dictionary is of type …, but this dictionary requires …
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM