これまでのところ、ViewComponent
はTagHelper
も解決しないとは思いません。これに代わるものはありますか?パラメータを受け取り、HtmlString
を返すもの
私は何も有害ではないと思います:
@helper foo(string something) {
<div>Say @something</div>
}
var emailbody = classfilenameinAppCodefolder.foo("hello"); //store result in a variable for further processes
今のところ、RCの前に一時的に削除すると思います。 https://github.com/aspnet/Razor/issues/281 および https://github.com/aspnet/Mvc/issues/11 まあ!それが良いです。私は誰かがそれに取り組んでいることを望みます。 @helper
がないと、大きなHtmlString
または「テンプレート」を作成するのは大変なことです。
注:パーシャルビューではうまくいかないようです。ビューをレンダリングするだけで、ビューを変数に戻すことはないと思います。
次に、App_Codeフォルダーはどうなりましたか?
@{
Func<String, IHtmlContent> foo = @<div>Say @item</div>;
}
@Alexakuの答えを拡張して、関数のようなヘルパーを実装した方法を示したいと思います。 1つの特定のページでのみ役立ちますが、入力パラメーターを使用してかみそりのコードを複数回実行できます。構文はすばらしいものではありませんが、かみそりの@helper関数がない場合は非常に便利です。最初に、関数への入力パラメーターを含む何らかのDtoを宣言します。
@functions {
private class Dto
{
public string Data { get;set; }
}
}
次に、かみそり関数を宣言します。 displayItemの値は複数行にすることができ、@ itemを使用してDto変数にアクセスすることにも注意してください。
@{
Func<Dto, IHtmlContent> displayItem = @<span>@item.Data</span>;
}
次に、かみそりテンプレートを使用する場合、ページのどこからでも次のように呼び出すことができます。
<div>
@displayItem(new Dto {Data = "testingData1" });
</div>
<div>
@displayItem(new Dto {Data = "testingData2" });
</div>
次のGithubの問題によると、@ helperが戻ってきて、asp .net core 3.0.0 preview 4に含まれるようです。
https://github.com/aspnet/AspNetCore/issues/511
[〜#〜]更新[〜#〜]
Asp .netコア3から、Razorコードブロック内でローカル関数を定義できるようになりました。
@{
void RenderName(string name)
{
<p>Name: <strong>@name</strong></p>
}
RenderName("Mahatma Gandhi");
RenderName("Martin Luther King, Jr.");
}
https://docs.Microsoft.com/en-us/aspnet/core/mvc/views/razor?view=aspnetcore-3.1#razor-code-blocks
または、次のように@functionsディレクティブを使用できます。
@{
RenderName("Mahatma Gandhi");
RenderName("Martin Luther King, Jr.");
}
@functions {
private void RenderName(string name)
{
<p>Name: <strong>@name</strong></p>
}
}
https://docs.Microsoft.com/en-us/aspnet/core/mvc/views/razor?view=aspnetcore-3.1#functions
@helper
ディレクティブ 削除されました 不完全であり、現在の設計が新しい「ASP.NET 5の方法」に適合しなかったためです。理由の1つは、ASP.NET 5のヘルパーをApp_Code
フォルダーで宣言する必要があることです 特別なフォルダーの概念はありません 。したがって、チームは一時的に機能を削除することを決定しました。
その「機能」は、ViewComponent(および必要に応じてTagHelper)に簡単に置き換えることができます。 ASP.NET CoreはWebデザイナーにとってはるかに使いやすく、ViewComponentsを使用すると、かみそりのコード(ほとんどない)なしでHTMLを記述できます。
例えば:
SayComponent : ViewComponent
クラスを作成します。
public class SayComponent : ViewComponent
{
public void Render(string message)
{
return View(message);
}
}
Views/Shared/Say/Default.cshtml
の下にViewファイルを作成します。
@model string
<div>Message: @Model.</div>
そしてそれを呼び出す:
@await Component.RenderAsync("Say", "some message")
より快適にご利用いただくために、これを_ViewImports.cshtml
ファイルに追加してください:
@addTagHelper *, YourSolutionName
そして、あなたはそれをタグヘルパーとして使うことができます:
<vc:say message="some message"></vc:say>
.NET Core 3の場合、ローカル関数を使用できます。
@{
void RenderName(string name)
{
<p>Name: <strong>@name</strong></p>
}
RenderName("Mahatma Gandhi");
RenderName("Martin Luther King, Jr.");
}
https://docs.Microsoft.com/en-us/aspnet/core/mvc/views/razor?view=aspnetcore-3.1#razor-code-blocks