C# 传递到字典中的模型项属于视图模型类型,但需要通用IEnum
我的应用程序发生了灾难性的事情。每个详细信息页面都开始显示: 传递到字典中的模型项的类型为 “MyBlogger.Models.PostViewModel”,但此词典需要一个模型 类型项 'System.Collections.Generic.IEnumerable'1[MyBlogger.Models.Post]' 前一分钟还不错,下一分钟就开始这样做了,每一个细节页面都在做一些字典类型的变化 我导航到的页面是C# 传递到字典中的模型项属于视图模型类型,但需要通用IEnum,c#,asp.net-mvc,linq,razor,dictionary,C#,Asp.net Mvc,Linq,Razor,Dictionary,我的应用程序发生了灾难性的事情。每个详细信息页面都开始显示: 传递到字典中的模型项的类型为 “MyBlogger.Models.PostViewModel”,但此词典需要一个模型 类型项 'System.Collections.Generic.IEnumerable'1[MyBlogger.Models.Post]' 前一分钟还不错,下一分钟就开始这样做了,每一个细节页面都在做一些字典类型的变化 我导航到的页面是http://localhost:52202/Post/MainDetails/te
http://localhost:52202/Post/MainDetails/test-上传
,http://localhost:52202/Post/Details/qwdqwdw
etc
例如,第一个链接的控制器操作如下:
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);
}
名称空间MyBlogger.Controllers
{
公共类后控制器:控制器
{
私有BlogEntities db=新BlogEntities();
//公共标记tags=新标记();
//
//获取:/Post/
[授权]
公共行动结果索引()
{
Dictionary postImages=新字典();
var posts=db.posts.Where(p=>p.BlogUserEmail==User.Identity.Name)。Include(p=>p.BlogUser)。Include(p=>p.Category);
foreach(POST中的var项目)
{
字节[]缓冲区=项。图片;
postmages.Add(item.Id,Convert.ToBase64String(buffer));
}
ViewBag.Images=后期图像;
返回视图(posts.ToList());
}
//
//获取:/Post/Details/5
//[授权]
公共操作结果详细信息(字符串urlslug)
{
Post Post=db.Posts.First(m=>m.urlslaug==urlslaug);
字节[]缓冲区=后期图片;
ViewBag.ImageToShow=Convert.TOBASE64字符串(缓冲区);
if(post==null)
{
返回HttpNotFound();
}
返回视图(post);
}
public ActionResult MainDetails(字符串urlslug)
{
Post Post=db.Posts.First(m=>m.urlslaug==urlslaug);
List posts=db.posts.ToList();
字节[]缓冲区=后期图片;
ViewBag.ImageToShow=Convert.tobase64字符串(post.Picture);
PostViewModel模型=新的PostViewModel
{
CurrentPost=post,
职位=职位
};
if(post==null)
{
返回HttpNotFound();
}
返回视图(model.Posts);
}
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; }
}
}
}
名称空间MyBlogger.Models
{
公共类后视图模型
{
公共Post CurrentPost{get;set;}
公共IEnumerable Posts{get;set;}
公共标记CurrentTag{get;set;}
公共IEnumerable标记{get;set;}
私有列表\u选择的PostTags;
公共列表SelectedPostTags
{
得到
{
如果(_selectedPostTags==null)
{
_selectedPostTags=CurrentPost.Tags.Select(m=>m.Id.ToList();
}
返回所选的PostTags;
}
设置{u selectedPostTags=value;}
}
}
}
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)
@model MyBlogger.Models.PostViewModel
@{
ViewBag.Title=“MainDetails”;
Layout=“~/Views/Shared/_Layout.cshtml”;
}
@DisplayFor(model=>model.CurrentPost.Title)
@*在@Html.DisplayFor上(model=>model.CurrentPost.PostedOn)
类别
@**@
@*@DisplayFor(model=>model.BlogUserEmail)*@
@Html.Raw(HttpUtility.HtmlDecode(Model.CurrentPost.Description))
@DisplayFor(model=>model.CurrentPost.Modified)
@Html.Partial(“SimilarPosts”,Model.Posts)
这似乎没有什么问题为什么我的整个应用程序都开始出现这些错误
堆栈跟踪:
[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
[InvalidOperationException:传入字典的模型项的类型为'MyBlogger.Models.PostViewModel',但此字典需要'System.Collections.Generic.IEnumerable'1[MyBlogger.Models.Post]'类型的模型项。]
System.Web.Mvc.ViewDataDictionary`1.SetModel(对象值)+585831
System.Web.Mvc.ViewDataDictionary..ctor(ViewDataDictionary)+371
System.Web.Mvc.WebViewPage`1.SetViewData(ViewDataDictionary viewData)+48
System.Web.Mvc.WebViewPage.ConfigurePage(WebPageBase父页面)+60
System.Web.WebPages.c___显示类7.b____6(TextWriter)+218
System.Web.WebPages.HelperResult.WriteTo(TextWriter)+10
System.Web.WebPages.WebPageBase.Write(HelperResult结果)+71
System.Web.WebPages.WebPageBase.RendersUrounding(字符串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、TextWriter、Object实例)+258
System.Web.Mvc.buildmanager compiledview.Render(ViewContext、TextWriter)+115
System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext上下文)+295
System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext ControllerContext,ActionResult ActionResult)+13
System.Web.Mvc.c__显示Class1A.b_17()+23
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter筛选器,ResultExecutingContext预文本,Func`1 continuation)+242
System.Web.Mvc.c__显示Class1C.b__19()+21
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext ControllerContext,IList`1过滤器,ActionResult ActionResult)+177
System.Web。