我如何定义一个方法在剃刀?


当前回答

下面是如何在ASP中编写列表助手。NET Core 3

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

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

其他回答

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>

您也可以使用下面的代码块。它更干净,功能更丰富。你也可以在上面插入变量,在下面插入函数。而不是使用2个单独的代码块。

@{
    string exampleVariable = "just an example variable";
    string anotherExampleVariable = "just another example variable";

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

        return errorMessage;
    }
}

你是说内联helper?

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

@SayHello("John")

你也可以用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>

先不讨论什么时候(如果有的话)应该做这件事,@functions就是你做这件事的方式。

@functions {

    // Add code here.

}

你也可以使用@{}块来创建函数:

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

然后在你的剃须刀页后面:

   <div>@(await MyAsyncString("weee").ConfigureAwait(false))</div>