所有视图中的单个.NET Core Razor C#函数

时间:2017-10-06 10:21:44

标签: c# asp.net-mvc razor

我知道有一种方法可以在视图中使用c#函数并在我的视图中使用@functions{ ... }方法调用它们,但有没有办法创建一个包含这些函数的共享视图以包含在控制器内部查看没有在每一个上复制相同的代码行?我尝试在@inject视图中使用_Layout和其他方法,但显然无法调用这些方法。我也尝试创建这样的外部类,但我想只在可能的情况下使用视图:

public class Functions : RazorPage<dynamic>
{
    public override Task ExecuteAsync()
    {
        throw new NotImplementedException();
    }

    public string GetTabActive(string lang)
    {
        if (ViewBag.lang.ToString() == lang) return "active";
        return "";
    }
}

2 个答案:

答案 0 :(得分:2)

创建一个继承WebViewPage的抽象类

public abstract class TestView<TViewModel> : WebViewPage<TViewModel>
{
    public void TestMethod()
    {
    }
}

在您的观看中使用“继承”

@inherits TestView<dynamic>

您的方法将可用

@TestMethod()

- 旁注

您不应将@model与@inherits结合使用 你只想要一个或另一个。

答案 1 :(得分:2)

我终于找到了这样做的方法,我需要在_ViewImports内部注入一个属性名称,如下所示:

@inject Functions func

并且,在StartUp中,我添加了一个指向我的抽象类的新服务:

services.AddSingleton<Functions>();

所以,在每个视图中,我可以使用模型并调用我的函数:

<h2>@func.MyFunction</h2>