Asp.net mvc ASP.NET MVC:传递到部分视图的空模型
我有一个ASP.NETMVC项目 HomeController.csAsp.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
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尖叫,说它在骗我,直到我意识到我通过的模型是空的。