Asp.net mvc ASP.NET MVC:传递到部分视图的空模型

Asp.net mvc ASP.NET MVC:传递到部分视图的空模型,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,我有一个ASP.NETMVC项目 HomeController.cs public class HomeController : Controller { private siteDBEntities db = new siteDBEntities(); // GET: Main/Home public ActionResult Index() { return View(); } public PartialViewResult

我有一个ASP.NETMVC项目

HomeController.cs

public class HomeController : Controller
{
    private siteDBEntities db = new siteDBEntities();
    // GET: Main/Home
    public ActionResult Index()
    {
        return View();
    }

    public PartialViewResult _theLastPost()
    {
        var a = (from c in db.Posts
                 orderby c.ID_Post descending
                 select new { c.Title,c.Content});
        return PartialView(a.ToList());
    }
}
Index.cshtml

@model IEnumerable<test1.Models.Post>
@{
ViewBag.Title = "Tourism";
Layout = "~/Areas/Main/Views/Shared/_Layout.cshtml";
}
@Html.Partial("_theLastPost")
更新1: 该错误已通过使用修复

@{ Html.RenderAction("_theLastPost"); }
现在我有一个错误: 无法在LINQ to Entities查询中构造实体或复杂类型“siteDB.Post”

已修复: 我只需编辑局部视图的控制器(\u thelast post),如下所示:

public PartialViewResult _theLastPost()
    {
        var a = (from c in db.Posts
                 orderby c.ID_Post descending
                 select c);
        return PartialView(a);
    }

在您的情况下,您应该使用
RenderAction
而不是
Partial
,因为
Partial
只是渲染视图。只要不传递ViewModel,就会看到这个错误

RenderAction
将调用控制器并返回视图

您的呼叫索引将是:

@{@Html.RenderAction("_theLastPost");}
还可以从控制器匿名对象返回。你不能这样做,因为所有的财产都会被推进,你不能看到它们

对于ViewModel,应该是这样的:

public class ViewModelPost
{
   public string Title {get; set;}
   public string Content {get; set;}
}


public PartialViewResult _theLastPost()
{
    var a = (from c in db.Posts
             orderby c.ID_Post descending
             select new ViewModelPost { c.Title,c.Content});
    return PartialView(a.ToList());
}
在你看来:

@model IEnumerable<ViewModelPost>
@model IEnumerable

在您的案例中,您应该使用
渲染
而不是
部分
因为
部分
只是渲染视图。只要不传递ViewModel,就会看到这个错误

RenderAction
将调用控制器并返回视图

您的呼叫索引将是:

@{@Html.RenderAction("_theLastPost");}
还可以从控制器匿名对象返回。你不能这样做,因为所有的财产都会被推进,你不能看到它们

对于ViewModel,应该是这样的:

public class ViewModelPost
{
   public string Title {get; set;}
   public string Content {get; set;}
}


public PartialViewResult _theLastPost()
{
    var a = (from c in db.Posts
             orderby c.ID_Post descending
             select new ViewModelPost { c.Title,c.Content});
    return PartialView(a.ToList());
}
在你看来:

@model IEnumerable<ViewModelPost>
@model IEnumerable
原因是:

如果未将模型指定为
@Partial
,它将使用视图的模型:

@Html.Partial("_theLastPost")

@Html.Partial("_theLastPost", Model)
当view/partial
@model
不相同时,会出现此错误


修复方法:

由于部分的控制器操作已经在执行您想要的操作,请通过
@Html.action

或者,将所需的数据传入

假设视图的模型有数据(在提供的代码中没有):

(但请确保该分部只需要一项:
@model test1.Models.Post

原因是:

如果未将模型指定为
@Partial
,它将使用视图的模型:

@Html.Partial("_theLastPost")

@Html.Partial("_theLastPost", Model)
当view/partial
@model
不相同时,会出现此错误


修复方法:

由于部分的控制器操作已经在执行您想要的操作,请通过
@Html.action

或者,将所需的数据传入

假设视图的模型有数据(在提供的代码中没有):



(但请确保该分部只需要一项:
@model test1.Models.Post

尝试@model IEnumerableif您的意思是在分部视图中,我在之前添加了它:提供的代码与提供的错误不匹配。你有什么改变吗?看起来您的视图的模型不是IEnumerable或@Html.Partial调用不是状态。您看到的模型已传递给Partial view是IEnumerable@freedomn mTry@model IEnumerableif您的意思是在Partial view中,我之前添加了它:提供的代码与提供的错误不匹配。你有什么改变吗?看起来您的视图的模型不是IEnumerable,或者@Html.Partial调用不是状态。当使用@Html.RenderAction(“\u theLastPost”);时,您看到传递给Partial view的模型是IEnumerable@freedomn mwhen,错误:无法将隐式“void”转换为“object”您是否在helper周围提到了@{}?你需要it@AlirezaSoleimaniAsl你确定吗?我是说我相信你现在有问题了是的。但是现在我得到了这个错误:执行处理程序'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'的子请求时出错。@freedomn-m但是告诉oposit。有什么想法吗?什么时候使用@Html.RenderAction(“\u thelast post”),错误:无法将隐式“void”转换为“object”您是否在helper周围提到了@{}?你需要it@AlirezaSoleimaniAsl你确定吗?我是说我相信你现在有问题了是的。但是现在我得到了这个错误:执行处理程序'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'的子请求时出错。@freedomn-m但是告诉oposit。有什么想法吗?我像@model test1.Models.Post这样设置模型,但我得到了一个错误:对象引用没有设置为对象的实例。这是一个单独的问题。调试它。你的问题已经被回答了,太疯狂了。我刚刚花了15分钟对着visual studio大喊大叫,说它在骗我,直到我意识到我传递的模型是空的。我像@model test1.Models.Post这样设置模型,但我得到了一个错误:对象引用未设置为对象的实例。这是另一个问题。调试它。你的问题已经被回答了,太疯狂了。我只是花了15分钟对着VisualStudio尖叫,说它在骗我,直到我意识到我通过的模型是空的。