あなたはview componentsを探しています。それらは、MVC 5以前で動作していた子アクションと同じように機能します。
public class LatestBlogPostsViewComponent : ViewComponent
{
private readonly BlogDbContext db;
public LatestBlogPostsViewComponent(BlogDbContext context)
{
db = context;
}
public async Task<IViewComponentResult> InvokeAsync(int limit, string orderBy)
{
var posts = // get latest posts;
return View(posts);
}
}
次に、ビューViews/Shared/Components/LatestBlogPosts.cshtml
を作成し、最新のブログの記事のリストをレンダリングしたいコードを追加します。ビューのモデルは、ビューコンポーネントによって返されるposts
のタイプになります。
@await Component.InvokeAsync("LatestBlogPosts", new { limit = 3, orderBy = "date asc" })
それとも、あなたはTagHelper構文を好む場合:
<vc:latest-blog-posts limit="3" orderBy="date asc"></vc:latest-blog-posts>
あなたがレンダリングされる最新のブログの記事は、コンポーネントが使用して呼び出したいビューやレイアウトの最後に
、後者の方法では、あなたはregister the view component(s)が必要です。
なぜタグヘルパーからアクションメソッドを呼び出すのですか?あなたは何を達成しようとしていますか? – Shyju
私がやろうとしていることは、自分の意見やモデルをできるだけシンプルにすることです。基本的なプロパティのコレクションを持つ_potential_コンポーネントのコレクションを受け取ります。私は上記のタグとしてこれらを簡単にレンダリングすることができますが、実際には各コンポーネントが複雑になる可能性があります。この例では、CMSを呼び出して最新の3つのブログ記事を取得する必要があります。私はバックエンドコードでHTMLを編集するという嫌な思いをしていますし、何らかの見方でコントローラ内の各コンポーネントを管理することで、アプリケーション全体で柔軟性と再利用性が向上すると判断しました。 – mnield
タグヘルパーは、コンテンツをレンダリングするために使用する必要があります。部分的なビューと子のアクションを使って、あなたが望むものを達成できますか? – Fran