【问题标题】:Displaying a partial view from another controller [duplicate]显示来自另一个控制器的部分视图[重复]
【发布时间】:2017-12-22 19:07:55
【问题描述】:

我正在尝试生成一个局部视图,它允许我在主页(索引)上显示最近的上下文。但是,模型仅返回为 NULL。

播客控制器方法:

// Generates list of most recent 2 podcasts
public async Task<IActionResult> _RecentPodcasts()
{
        var recentList = from p in _context.Podcast
                         select p;
        recentList = recentList.OrderByDescending(p => p.PublishDate).Take(2);            

        return View(await recentList.ToListAsync());
}

部分视图(Podcasts/_RecentPodcasts.cshtml)

@model IEnumerable<ComesNaturally.Models.Podcast>

@{ 
    ViewData["Title"] = "_RecentPodcasts";
}


<div class="col-md-6">
<div class="table-title">
    <table class="table-fill">
        <thead>
            <tr>
                <th>Recent Podcasts</th>
            </tr>
        </thead>
@if (Model == null)
{
        <tr> No items found</tr>}
else
{
    @foreach (var item in Model)
     { 
         <tr>
             <td><a asp-action="Details" asp-route-id="@item.ID" class="alert-link">@Html.DisplayFor(modelItem => item.Title)</a></td>
         </tr>
     }}
    </table>
</div>
</div>

主视图(Home/Index.cshtml)

@Html.Partial("~/Views/Podcasts/_RecentPodcasts.cshtml");

【问题讨论】:

  • 主视图中的模型与局部视图中的模型是否相同?如果没有尝试将模型作为参数传递给Partial 语句中的局部视图? (或者它是一个表达式?)

标签: .net asp.net-mvc asp.net-core-mvc


【解决方案1】:

@await Html.PartialAsync("_RecentPodcasts")razor 按照惯例知道如何找到它。现在至于传递数据,您需要有某种方法来实际获取数据吗?

public async Task&lt;IActionResult&gt; _RecentPodcasts() 殴打应为该方法的命名(提示删除_)。实际上很惊讶编译器没有抱怨。

Home / Index.cshtml 将有一个 viewmodel,它有一个 type 属性……你猜对了……“RecentPodCasts”

//fill it from HomeController...
public class HomeViewModel(){
    public IEnumerable<Podcast> RecentPodcasts {get;set;}
}

//HomeController.cs
public async Task<IActionResult> Index(){
     var vm = new HomeViewModel();
     vm.RecentPodcasts = await _context.Podcasts.OrderByDescending(p => p.PublishDate).Take(2).ToListAsync();

     return View(vm);
}


//home/index.cshtml
@model YourNameSpace.Models.HomeViewModel  


@*somewhere in Home/Index.cshtml*@
@await Html.PartialAsync("_RecentPodCasts", Model.RecentPodcasts )

这应该只是覆盖它......其余的空白和......将让您在 .net core/mvc 旅程中发现

【讨论】:

  • 这让我朝着正确的方向前进。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
相关资源
最近更新 更多