创建要在视图中使用的方法/函数

时间:2015-05-19 04:17:52

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

我们如何编写要在def watch(request, video_id): video_to_watch = Video.objects.get(id=video_id) popular_videos = Video.objects.filter(views__gt=100) 页面中使用的函数。我们以前可以在视图中使用*.cshtml@helper。我们如何做到这一点?例如,我想编写一个递归函数来显示所有配置值。我怎么能这样做?

@function

我想我们需要在project.json中添加一个依赖项,然后选择在Startup.cs中使用它。

2 个答案:

答案 0 :(得分:2)

使用剃刀视图快速而肮脏,假设您的视图组件提供递归模型。

组件视图:

@model YourRecursiveDataStructure
<ul class="sidebar-menu">
    <li class="header">MAIN NAVIGATION</li>

    @foreach (var node in Model.RootNodes)
    {
        @Html.Partial("~/YourPath/RenderElement.cshtml", node)
    }
</ul>

在视图中渲染元素:

@model YourRecursiveNode
<li>
    <a href="@Model.Href">
        <span>@Model.Display</span>
    </a>
    @Html.Partial("~/YourPath/RenderChildren.cshtml", Model)
</li>

然后在另一个视图中循环节点的子节点:

@model YourRecursiveNode
@if (Model.HasChildren)
{
    <ul>
        @foreach (var child in Model.Children)
        {
            @Html.Partial("~/YourPath/RenderElement.cshtml", child)
        }
    </ul>
}

答案 1 :(得分:1)

参考我们只能在网上看到的few设计discussions@helper因设计原因被移除;替换为View Components.

我建议使用如下所示的View Component:

public class ConfigurationKeysViewComponent : ViewComponent
{
    private readonly IConfiguration config;
    public ConfigurationKeysViewComponent(IConfiguration config)
    {
        this.config = config;
    }

    public IViewComponentResult Invoke(string currentSubKey = "")
    {
        return View(new ConfigurationData
        {
            Key = currentSubKey,
            Value = config.Get(currentSubKey),
            SubKeys = config.GetSubKey(currentSubKey).GetSubKeys().Select(sk => sk.Key)
        });
    }
}

您的ViewComponent的视图会相对简单:

<dt>@Model.Key</dt>
<dd>@config.Get(Model.Key)</dd>
@foreach (var sk in Model.SubKeys)
{
    @Component.Invoke("ConfigurationKeys", sk)
}

然后,您可以从根视图中调用它,如下所示:

@Component.Invoke("ConfigurationKeys")

免责声明:我在SO编辑器中写道,可能存在编译器错误。另外,我不确定View Components是否支持默认参数 - 您可能需要在根视图调用视图组件时添加默认""

或者,如果这只是调试代码,您可以使用Stack<>打开递归。