我需要在一个cshtml文件中创建一个函数。你可以把我的情况想象成ASP。NET页面方法,它们是在页面中实现的最小web服务,因为它们的作用域是一个页面。我知道HTML助手(扩展方法),但我的函数只需要在一个cshtml文件。我不知道如何在视图中创建函数签名。 注意:我使用Razor模板引擎。


当前回答

你可以使用@helper Razor指令:

@helper WelcomeMessage(string username)
{
    <p>Welcome, @username.</p>
}

然后像这样调用它:

@WelcomeMessage("John Smith")

其他回答

如果你想访问页面的全局变量,你可以这样做:

@{
    ViewData["Title"] = "Home Page";

    var LoadingButtons = Model.ToDictionary(person => person, person => false);

    string GetLoadingState (string person) => LoadingButtons[person] ? "is-loading" : string.Empty;
}

如果你的方法不需要返回html,必须做一些其他的事情,那么你可以在Razor中使用lambda而不是helper方法

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";

    Func<int,int,int> Sum = (a, b) => a + b;
}

<h2>Index</h2>

@Sum(3,4)

你可以使用@helper Razor指令:

@helper WelcomeMessage(string username)
{
    <p>Welcome, @username.</p>
}

然后像这样调用它:

@WelcomeMessage("John Smith")

为什么不直接在CSHTML文件中声明这个函数呢?

@functions{
    public string GetSomeString(){
        return string.Empty;
    }
}

<h2>index</h2>
@GetSomeString()

看一下Declarative Razor Helpers