ASP.NET ChildActionOnly
最后修改于 2025 年 4 月 3 日
在本文中,我们将探讨 ASP.NET 8 中的 ChildActionOnly 属性。此属性用于限制操作方法只能作为子操作进行调用。
子操作是控制器中从视图内部调用的特殊操作。它们可以在 ASP.NET MVC 中实现可重用的 UI 组件和部分页面更新。
基本定义
ASP.NET MVC 中的 ChildActionOnly 属性将控制器操作方法标记为只能作为子操作调用。它可防止通过 URL 直接访问。
当应用于操作方法时,ChildActionOnly 可确保该方法只能使用视图中的 Html.Action 或 Html.RenderAction 辅助方法来调用。
子操作对于创建需要服务器端处理的可重用组件(如菜单、小部件或部分视图)非常有用。它们有助于将复杂的视图组织成更小、更易于管理的部分。
ASP.NET ChildActionOnly 示例
以下示例演示了如何使用 ChildActionOnly 创建一个作为部分视图呈现的导航菜单。
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.UseStaticFiles(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
这设置了一个基本的 ASP.NET MVC 应用程序,其中包含控制器支持和路由。AddControllersWithViews
方法启用了 MVC 功能。
using Microsoft.AspNetCore.Mvc; public class HomeController : Controller { public IActionResult Index() { return View(); } [ChildActionOnly] public IActionResult NavigationMenu() { var menuItems = new List<MenuItem> { new MenuItem("Home", "Index", "Home"), new MenuItem("Products", "Index", "Products"), new MenuItem("About", "About", "Home"), new MenuItem("Contact", "Contact", "Home") }; return PartialView("_NavigationMenu", menuItems); } } public record MenuItem(string Text, string Action, string Controller);
HomeController 包含两个操作。Index 操作用于提供主页面,而 NavigationMenu 被标记为 ChildActionOnly 并返回一个部分视图。
@model List<MenuItem> <nav> <ul> @foreach (var item in Model) { <li> <a asp-controller="@item.Controller" asp-action="@item.Action"> @item.Text </a> </li> } </ul> </nav>
此部分视图呈现导航菜单。它从子操作接收菜单项并生成导航的 HTML。
@{ ViewData["Title"] = "Home Page"; } <div class="container"> <h1>Welcome to our website</h1> @await Html.PartialAsync("_NavigationMenu") <div class="main-content"> <p>This is the main content of the page.</p> </div> </div>
主视图通过渲染部分视图来包含导航菜单。当呈现部分视图时,子操作会自动调用。
此示例展示了 ChildActionOnly 如何帮助创建可重用组件。导航菜单可以包含在任何视图中,同时保持逻辑分离。
来源
在本文中,我们探讨了 ASP.NET 8 中的 ChildActionOnly 属性。此功能支持在 MVC 应用程序中创建模块化、可重用的 UI 组件。