MVC:传入字典的模型项是 System.Int32 类型

MVC: The model item passed into the dictionary is of type System.Int32

我在尝试进入视图时遇到错误。我尝试过不使用 IEnumerable,但效果不佳。

错误: MVC:传入字典的模型项是 System.Int32 类型,而此字典需要类型模型元素 System.Collections.Generic.IEnumerable`1[Cinema.Models.Video].

@model IEnumerable<Cinema.Models.Video>
@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

我的控制器

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult Search()
    {
        CinemaEntities db = new CinemaEntities();
        return View(db.SearchVideo(""));
    }

    [HttpPost]
    public ActionResult Search(string VideoName)
    {
        CinemaEntities db = new CinemaEntities();
        return View(db.SearchVideo(VideoName));
    }
}

我的搜索视频

public virtual ObjectResult<Video_SearchVideo_Result1> Video_SearchVideo(string videoName)
{
    var videoNameParameter = videoName != null ?
        new ObjectParameter("VideoName", videoName) :
        new ObjectParameter("VideoName", typeof(string));

    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Video_SearchVideo_Result1>("Video_SearchVideo", videoNameParameter);
}

public virtual int SearchVideo(string videoName)
{
    var videoNameParameter = videoName != null ?
        new ObjectParameter("VideoName", videoName) :
        new ObjectParameter("VideoName", typeof(string));

    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("SearchVideo", videoNameParameter);
}

SearchVideo returns 一个 int 根据您的代码:

public virtual int SearchVideo(string videoName)

您需要将该函数更改为 return IEnumerable<ECinema.Models.Video>

最简单的方法可能是使用 LINQ 而不是调用存储过程。但是如果您真的想要保留存储过程,您可以将其配置为return您的desired type.