2012-03-20 1 views
2

я получаю следующее сообщение об ошибке при попытке запустить мое приложение:модель элемент передается в словарь типа «System.Collections.Generic.List ошибка

„Модель элемент передается в словарь типа“ System.Collections.Generic.List 1[MvcApplication2.Models.Blog]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [MvcApplication2.Models.BlogDataEntities] '. '

Вот трассировки стека:

  [InvalidOperationException: The model item passed into the dictionary is of type   'System.Collections.Generic.List`1[MvcApplication2.Models.Blog]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[MvcApplication2.Models.BlogDataEntities]'.] 
      System.Web.Mvc.ViewDataDictionary`1.SetModel(Object value) +324899 
    System.Web.Mvc.ViewDataDictionary..ctor(ViewDataDictionary dictionary) +377 
System.Web.Mvc.WebViewPage`1.SetViewData(ViewDataDictionary viewData) +48 
System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +99 
System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +115 
System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +303 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13 
System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +23 
System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +260 
System.Web.Mvc.<>c__DisplayClass1e.<InvokeActionResultWithFilters>b__1b() +19 
       System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +177 
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +343 
System.Web.Mvc.Controller.ExecuteCore() +116 
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +97 
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10 
System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +37 
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +21 
System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +12 
System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62 
System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +50 
System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7 
System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22 
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60 
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9 
     System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8969117 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184 

А вот мой BlogController:

  using System; 
     using System.Collections.Generic; 
      using System.Linq; 
      using System.Web; 
      using System.Web.Mvc; 
      using MvcApplication2.Models; 

       namespace MvcApplication2.Controllers 
       { 
     public class BlogController : Controller 
     { 
    // 
    // GET: /Blog/ 

    public ActionResult Index() 
    { 
     using (var db = new BlogDataEntities()) 
     { 
      return View(db.Blogs.ToList()); 
     } 

    } 

    // 
    // GET: /Blog/Details/5 

    public ActionResult Details(int id) 
    { 
     return View(); 
    } 

    // 
    // GET: /Blog/Create 

    public ActionResult Create() 
    { 
     return View(); 
    } 

    // 
    // POST: /Blog/Create 

    [HttpPost] 
    public ActionResult Create(Blog blog) 
    { 
     try 
     { 
      using (var db = new BlogDataEntities()) 
      { 
       db.Blogs.Add(blog); 
       db.SaveChanges(); 
      } 

      return RedirectToAction("Index"); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 


    // 
    // GET: /Blog/Edit/5 

    public ActionResult Edit(int id) 
    { 
     using (var db = new BlogDataEntities()) 
     { 
      return View(db.Blogs.Find(id)); 
     } 

    } 

    // 
    // POST: /Blog/Edit/5 

    [HttpPost] 
    public ActionResult Edit(int id, Blog blog) 
    { 
     try 
     { 
      using (var db = new BlogDataEntities()) 
      { 
       db.Entry(blog).State = System.Data.EntityState.Modified; 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 
     } 
     catch 
     { 
      return View(); 
     } 
    } 



    // 
    // GET: /Blog/Delete/5 

    public ActionResult Delete(int id) 
    { 
     using (var db = new BlogDataEntities()) 
     { 
      return View(db.Blogs.Find(id)); 
     } 
    } 

    [HttpPost] 
    public ActionResult Delete(int id, Blog blog) 
    { 
     try 
     { 
      using (var db = new BlogDataEntities()) 
      { 
       db.Entry(blog).State = System.Data.EntityState.Deleted; 
       db.SaveChanges(); 
      } 
      return RedirectToAction("Index"); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 
} 

}

ответ

4

Проблема заключается в том, что у вас есть действие контроллера, который проходит в List<Blog> экземпляр для представления, которое строго типизировано до IEnumerable<BlogDataEntities>, что невозможно.

Так у вас есть действие контроллера, как это:

public ActionResult Foo() 
{ 
    List<Blog> blogs = ... 
    return View(blogs); 
} 

и соответствующий вид:

@model IEnumerable<BlogDataEntities> 
... 

Другая возможность происходит эта ошибка в том, что ваш взгляд набран к правильной модели, что контроллера, но внутри этого вида вы попытались отобразить часть, которая была напечатана на другой модели:

@model List<Blog> 
... 
@Html.Partial("_MyPartial") 

_MyPartial.cshtml где выглядит следующим образом:

@model IEnumerable<BlogDataEntities> 
... 

который в очередной раз не представляется возможным. В этом случае вы можете использовать второй аргумент для вспомогательного помощника Html.Partial, чтобы обеспечить правильную модель для этого частичного.

Смежные вопросы