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 组件。