如何在cshtml模板中创建函数?

时间:2011-06-30 08:23:53

标签: asp.net-mvc asp.net-mvc-3 razor

我需要在一个cshtml文件中创建一个只需要的函数。您可以将我的情况视为ASP.NET页面方法,它是在页面中实现的最小Web服务,因为它们的范围限定为一个页面。我知道HTML帮助器(扩展方法),但我的功能只需要一个cshtml文件。我不知道如何在视图中创建函数签名。 注意:我正在使用Razor模板引擎。

6 个答案:

答案 0 :(得分:375)

为什么不在cshtml文件中声明该函数?

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

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

答案 1 :(得分:262)

您可以使用@helper Razor指令:

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

然后你这样调用它:

@WelcomeMessage("John Smith")

答案 2 :(得分:23)

如果您的方法不必返回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)

答案 3 :(得分:8)

答案 4 :(得分:3)

在ASP.NET Core Razor Pages中,可以在函数中结合使用C#和HTML:

@model PagerModel
@{
}

@functions 
{
    void PagerNumber(int pageNumber, int currentPage)
    {
        if (pageNumber == currentPage)
        {
            <span class="page-number-current">@pageNumber</span>
        }
        else
        {
            <a class="page-number-other" href="/table/@pageNumber">@pageNumber</a>
        }
    }
}

<p>@PagerNumber(1,2) @PagerNumber(2,2) @PagerNumber(3,2)</p>

答案 5 :(得分:0)

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

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

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

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