web-dev-qa-db-ja.com

cshtmlテンプレートで関数を作成する方法は?

1つのcshtmlファイル内でのみ必要な関数を作成する必要があります。私の状況はASP.NETページメソッドと考えることができます。ASP.NETページメソッドは1つのページに限定されているため、ページに実装される最小のWebサービスです。 HTMLヘルパー(拡張メソッド)について知っていますが、私の関数は1つのcshtmlファイルで必要なだけです。ビュー内で関数シグネチャを作成する方法がわかりません。 :Razorテンプレートエンジンを使用しています。

200
Saeed Neamati

@helper Razorディレクティブを使用できます。

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

次に、次のように呼び出します。

@WelcomeMessage("John Smith")
265
Daniel Liuzzi

なぜcshtmlファイル内でその関数を宣言しないのですか?

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

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

メソッドがhtmlを返す必要がなく、他の何かをする必要がある場合、Razorのヘルパーメソッドの代わりにラムダを使用できます。

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

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

<h2>Index</h2>

@Sum(3,4)
23

Declarative Razor Helpers をご覧ください

8
archil

ページのグローバル変数にアクセスする場合は、次の操作を実行できます。

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

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

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