如何在Razor中定义方法?

时间:2011-03-01 20:23:12

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

如何在Razor中定义方法?

9 个答案:

答案 0 :(得分:284)

单独留下关于何时(如果有的话)应该进行的辩论,@functions就是你如何做到的。

@functions {

    // Add code here.

}

答案 1 :(得分:182)

你的意思是内联帮助?

@helper SayHello(string name)
{
    <div>Hello @name</div>
}

@SayHello("John")

答案 2 :(得分:23)

在剃刀内定义一个函数非常简单。

@functions {

    public static HtmlString OrderedList(IEnumerable<string> items)
    { }
}

所以你可以在任何地方调用该函数。像

@Functions.OrderedList(new[] { "Blue", "Red", "Green" })

但是,同样的工作也可以通过helper来完成。作为一个例子

@helper OrderedList(IEnumerable<string> items){
    <ol>
        @foreach(var item in items){
            <li>@item</li>
        }
    </ol>
}

那有什么区别?根据之前的post,@ helpers和@functions共享一个共同点 - 它们使代码重用成为Web页面中的一种可能性。他们还有另一个共同点 - 乍一看它们看起来是一样的,这可能会对他们的角色产生一些混淆。但是,它们并不相同。从本质上讲,帮助程序是作为方法公开的可重用的Razor sytnax片段,用于将HTML呈现给浏览器,而函数是可以从Web页面应用程序中的任何位置调用的静态实用程序方法。帮助器的返回类型始终是HelperResult,而函数的返回类型是您想要的任何类型。

答案 3 :(得分:12)

您也可以使用像这样的Func

@{
    var getStyle = new Func<int, int, string>((width, margin) => string.Format("width: {0}px; margin: {1}px;", width, margin));
}

<div style="@getStyle(50, 2)"></div>

答案 4 :(得分:9)

Razor只是一个模板引擎。

你应该创建一个普通的类。

如果您想在Razor页面中创建方法,请将它们放在@functions block中。

答案 5 :(得分:0)

您也可以只使用class DashboardPage extends Component { ... componentDidMount() { axios.get('http://localhost:3000/users/me', this.yourConfig) .then(function (response) { // handle success console.log(response.data.name) console.log(response.data.email) }) .... render() { return ( <div className="App"> <p>Welcome {this.response.data.name}</p> <p>Your email is {this.response.data.email}</p> this is your token {this.tokenCookie} </div> ); } } 块来创建函数:

@{ }

然后在您的剃须刀页面中

@{
    async Task<string> MyAsyncString(string input)
    {
        return Task.FromResult(input);
    }
}

答案 6 :(得分:0)

您可以在一个剃刀块(即@{})中简单地将它们声明为局部函数

@{
    int Add(int x, int y)
    {
        return x + y;
    }
}

<div class="container">
    <p>
        @Add(2, 5)
    </p>
</div>

答案 7 :(得分:0)

MyModelVm.cs

public class MyModelVm
{
    public HttpStatusCode StatusCode { get; set; }
}

Index.cshtml

@model MyNamespace.MyModelVm
@functions
{
    string GetErrorMessage()
    {
        var isNotFound = Model.StatusCode == HttpStatusCode.NotFound;
        string errorMessage;
        if (isNotFound)
        {
            errorMessage = Resources.NotFoundMessage;
        }
        else
        {
            errorMessage = Resources.GeneralErrorMessage
        }

        return errorMessage;
    }
}

<div>
    @GetErrorMessage()
</div>

答案 8 :(得分:0)

这里是如何在 ASP.NET Core 3 中编写列表助手

您现在可以像以前一样在代码块中声明的方法体中包含 HTML 标记,作为本地方法,或在@functions 块中。该方法应该返回 void,如果需要异步处理,则为 Task :

@{
    void Template(string[] listItems, string style)
    {
        <ul>
            @foreach (var listItem in listItems)
            {
            <li class="@style">@listItem</li>
            }
        </ul>
    }
}