再次感到困惑...局部视图

比特损失

活跃的成员
已加入
2016年12月10日
留言内容
35
编程经验
Beginner
我一定很愚蠢,无法跟踪简单的破坏……但是然后我再次发现,破坏常常是假设x年前的教程和示例中的知识,而我可能没有发现。

这看似简单,但显然我缺少一些东西。

以前从未尝试过使用局部视图。

我用下面的控制器返回了正确的记录,设置了局部视图:
C#:
[COLOR=blue]public[/COLOR] [COLOR=#2b91af]IActionResult[/COLOR] _partialJobHistory(
        [COLOR=blue]int[/COLOR] id)
       {
 
 
           [COLOR=blue]var[/COLOR] jobs = [COLOR=blue]from[/COLOR] j [COLOR=blue]in[/COLOR] _context.Job
                       .Include(j => j.Site)
                       .Include(j => j.WaterBody)
                       .Where(j => j.Site.SiteID == id)
                       .OrderByDescending(j => j.BookingDate)
                       .Take(9)
                      [COLOR=blue]select[/COLOR] j;
 
 
 
 
           [COLOR=blue]return[/COLOR] View(jobs);
       }

经过测试,效果很好。

现在,我想将其合并到“网站详细信息”视图中。

在Site.Details中,我添加了以下代码以包括部分视图,并从详细信息视图传递siteID(我认为)。

C#:
@Html.Partial([COLOR=#a31515]"~/Views/Jobs/_partialJobHistory.cshtml"[/COLOR], Model.SiteID)

从我所有的阅读中可以得出以下结论:
MvcHtmlString html.partial(字符串局部视图名称,对象模型)渲染参考视图中的部分视图内容。模型参数将模型对象传递到局部视图。

但是,尽管研究了三个不同的教程和msdn,但我显然还是缺少了一些东西。

加载以下内容的详细信息页面时出现错误:

C#:
InvalidOperationException: The model item passed into the ViewDataDictionary is of type 'System.Int32', but this ViewDataDictionary instance requires a model item of type 'System.Collections.Generic.IEnumerable`1[EVA.Models.Job]'.

我从阅读中看不到什么地方出了问题?

我不完全理解为什么要手动输入地址为 http:// localhost:62233 / Jobs / _partialJobHistory / 36 它完全按照需要工作。所以这不是我要传递给代码中局部视图的内容吗?为什么不呢
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
您似乎给人的印象是:
C#:
@Html.Partial("~/Views/Jobs/_partialJobHistory.cshtml", Model.SiteID)
将要调用“ _partialJobHistory”操作。它不是。发生的事情是您调用一个动作,然后将其从模型传递给视图。如果该视图包含局部视图,则这些局部视图将使用您提供的模型简单地呈现。没有额外的操作。视图传递给部分视图的模型可能是视图自己的模型,也可能只是它的一部分。例如,假设您有一个显示站点的视图,在其中有一个显示作业列表的局部视图。您可能会使用局部视图,因为您希望能够在多个位置显示作业列表。在您的操作中,您将检索一个具有相关工作的站点,并将其作为模型传递给您的站点视图。在该视图中,您将调用“ Html.Partial”,并指定Jobs局部视图和主模型的Jobs集合作为局部视图的模型。

如果要通过操作返回部分视图,则必须使用视图脚本中的AJAX调用来调用该操作,而不是使用“ Html.Partial”来简单地使用已有模型渲染部分视图。在这种情况下,您可能会单独返回一个Site作为主视图的模型,然后在加载视图后,从脚本中调用另一个动作,该脚本返回带有特定SiteID的Jobs作为模型的部分视图。
 

比特损失

活跃的成员
已加入
2016年12月10日
留言内容
35
编程经验
Beginner
您可能会使用局部视图,因为您希望能够在多个位置显示作业列表。在您的操作中,您将检索一个具有相关工作的站点,并将其作为模型传递给您的站点视图。在该视图中,您将调用“ Html.Partial”,并指定Jobs局部视图和主模型的Jobs集合作为局部视图的模型。
[\引用]

我没有说我理解它。

这当然是我想要做的。我认为,这是实现目标的最流畅方法,随着我进一步深入该项目,我可以在许多其他地方重用。

我在教程中提到它谈论@ HTML.Action,但是在ASP.NET CORE中这不是一个选择。抱歉,这似乎是一个愚蠢的问题,但这是AJAX电话吗?
 
最佳 底部