Asp.net mvc 5 如何在MVC5局部视图中获取子操作方法返回的值
我试图不太成功地让我的头围绕MVC。My home controller包含一个运行正常的索引方法,但我不知道如何调用ChildAction方法home/TopArticle 行动方法Asp.net mvc 5 如何在MVC5局部视图中获取子操作方法返回的值,asp.net-mvc-5,Asp.net Mvc 5,我试图不太成功地让我的头围绕MVC。My home controller包含一个运行正常的索引方法,但我不知道如何调用ChildAction方法home/TopArticle 行动方法 [ChildActionOnly] public ActionResult TopArticle() { return PartialView(_service.GetTopArticle()); } 在我的索引视图中,我有以下标记: @section featured { @Html.Part
[ChildActionOnly]
public ActionResult TopArticle()
{
return PartialView(_service.GetTopArticle());
}
在我的索引视图中,我有以下标记:
@section featured {
@Html.Partial("_TopItem")
}
\u TopItem视图
@model IEnumerable<MySite.Models.NewPage>
<section class="featured">
<div id="TopItem">
<div id="TopItemImg">
<a href="http://www.mysite.co.uk/">
<img style="border: 1px solid lightgray" width="320" height="233" style="border:1px solid lightgray;" alt="Model.Title" src="/Img/Model.TopItemImage">
</a>
</div>
<div id="TopContent">
<h2><a href="/Home/TopItem/Model.Id/Model.Title"></a></h2>
<div class="dt">
<div class="dl">
@Html.Label(Model.DatePublished.ToString())
@Html.Label(@Html.Action("TopArticle", "Home", new { // am lost at this point}))
</div>
<div class="tl">
@Html.Label(Model.InfoTags ?? "")
</div>
</div>
</div>
</div>
</section>
@model IEnumerable
@Label(Model.DatePublished.ToString())
@Label(@Html.Action(“TopArticle”,“Home”,new{//am lost at this point}))
@Html.Label(Model.InfoTags???)
索引视图也使用@model IEnumerable,我不知道这是否正确。模型本身包含索引和_TopItem视图所需的所有内容,只是_TopItem视图将返回一条记录,而索引视图将返回多条记录。另外,在_service.GetTopArticle中运行的代码执行一些仅与顶级文章记录相关的非查询内容
我需要躺下。。。是时候好好学习这些东西了。首先,关于从索引视图调用子操作的问题: 您的特色部分当前正在调用
@Html.Partial
,这意味着它将找到“\u TopItem”
部分视图,并在当前视图(即您的索引视图)中将其呈现为Html编码的字符串
您指定尝试调用子操作TopArticle()
,并在视图中呈现作为html字符串返回的部分视图。为此,您需要使用:
@section featured {
@Html.Action("TopArticle", "Home")
}
但是,我不认为这是您真正需要的,因为您说过您的索引视图模型包含索引和_TopItem部分视图的所有信息(请参阅下文)
有关更多信息,请在谷歌上搜索视图、部分视图和子操作的差异
要更正代码,我首先要确保_TopItem部分视图是正确的。我已经用_TopItem部分观点确定了以下问题,其中一些问题超出了原始问题的范围:
- 该模型作为NewPage的IEnumerable传入,但您的代码没有枚举多个新页面对象,看起来它应该只为单个NewPage模型创建html。因此,我认为示范声明应该是:
@model MySite.Models.NewPage
- 标记包含对样式属性的2个引用,而不是1个
- 标记包含
的alt属性,这意味着alt=“Model.Title”
将直接作为html编写,我希望您希望alt=“Model.Title”
在alt属性中呈现模型的内容alt=“@Model.Title”
- 类似地,标记包含
,我希望它应该是src=“/Img/Model.TopItemImage”
src=“/Img/@Model.TopItemImage”
- 所有标签标签似乎都不正确。例如,
-@Html.Label(Model.DatePublished.ToString())
将返回一个字符串,然后将尝试在模型上找到该字符串,并且由于该字段名不存在而出错。因此,您可能需要编写:Model.DatePublished.ToString()
或@Html.Label(“DatePublished”)
。对于第二个标签,我不确定您试图实现什么,但您可能希望查找适当的文章@Html.Label(m=>m.DatePublished)
@section featured {
@Html.Partial("_TopItem", Model.TopArticle)
}
注意,正如您所说的,您的索引模型包含要传递到_TopItem部分视图的信息,我假设索引模型包含一个名为TopArticle的属性,类型为NewPage。不管怎样,您都可以通过调用@Html.partial将模型传递到partial中。如果您通过呼叫@Html.Partial传递模型,则您可能不需要ChildOnlyAction。感谢您如此详尽的回答,很抱歉延迟回复。