Child Action केवल चाइल्ड रिक्वेस्ट द्वारा एक्सेसिबल होता है। यह URL रिक्वेस्ट्स का जवाब नहीं देगा। यदि कोई प्रयास किया जाता है, तो रनटाइम एरर फेंका जाएगा - "Child action is accessible only by a child request"। चाइल्ड एक्शन मेथड्स को व्यू से Action() और RenderAction() HTML हेल्पर्स का उपयोग करके चाइल्ड रिक्वेस्ट करके इनवोक किया जा सकता है।
चाइल्ड एक्शन मेथड्स NonAction मेथड्स से अलग होते हैं, क्योंकि NonAction मेथड्स को Action() या RenderAction() हेल्पर्स का उपयोग करके इनवोक नहीं किया जा सकता।
चाइल्ड एक्शन एरर (डायरेक्ट URL एक्सेस)

उदाहरण: कंट्रोलर
using System.Collections.Generic;
using System.Web.Mvc;
namespace DemoMvcApplication.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
// यह एक्शन केवल चाइल्ड रिक्वेस्ट के रूप में कॉल किया जा सकता है
[ChildActionOnly]
public ActionResult Countries(List countries)
{
return View(countries);
}
}
}
इंडेक्स व्यू (पैरेंट व्यू)
@{
ViewBag.Title = "Countries List";
}
Countries List
@* Action() हेल्पर - रिजल्ट को स्ट्रिंग के रूप में लौटाता है *@
@Html.Action("Countries", new { countries = new List() { "USA", "UK", "India", "Australia" } })
कंट्रीज व्यू (चाइल्ड व्यू - Countries.cshtml)
@model List
@foreach (string country in Model)
{
-
@country
}
आउटपुट

RenderAction() का उपयोग करना
चाइल्ड एक्शन्स को RenderAction() HTML हेल्पर का उपयोग करके भी इनवोक किया जा सकता है:
@{
Html.RenderAction("Countries", new {
countries = new List() { "USA", "UK", "India", "Australia" }
});
}
Action() vs RenderAction()
| विशेषता | Html.Action() | Html.RenderAction() |
|---|---|---|
| रिटर्न टाइप | MvcHtmlString (स्ट्रिंग लौटाता है) | void (डायरेक्ट रिस्पॉन्स स्ट्रीम में लिखता है) |
| प्रदर्शन | थोड़ा धीमा (स्ट्रिंग आवंटन) | थोड़ा तेज़ (सीधे स्ट्रीम में) |
| उपयोग | @Html.Action(...) | @{ Html.RenderAction(...); } |
| कंपोजिशन | अन्य हेल्पर्स के साथ कंपोज़ कर सकते हैं | स्टेटमेंट के रूप में उपयोग करना होगा |
ChildActionOnly के उपयोग मामले
- विजेट्स/पार्शियल्स: नेविगेशन मेनू, साइडबार, फुटर जो कई पेजों पर पुन: उपयोग होते हैं
- डेटा-ड्रिवन कॉम्पोनेंट्स: शॉपिंग कार्ट समरी, यूजर प्रोफाइल विजेट, नोटिफिकेशन बैज
- जटिल UI कंपोजिशन: पैरामीटर्स के साथ पुन: प्रयोज्य व्यू कंपोनेंट्स
- कैशिंग:
[ChildActionOnly]+[OutputCache(Duration = 300)]विजेट्स के लिए
आधुनिक विकल्प: व्यू कंपोनेंट्स (ASP.NET Core)
ASP.NET Core में, ChildActionOnly को View Components द्वारा प्रतिस्थापित किया गया है जो अधिक शक्तिशाली और टेस्टेबल हैं:
// ViewComponent क्लास
public class CountriesViewComponent : ViewComponent
{
public IViewComponentResult Invoke(List countries)
{
return View(countries);
}
}
// व्यू में इनवोक करना
@await Component.InvokeAsync("Countries", new { countries = new List { "USA", "UK" } })
ChildActionOnly प्रतिबंध
- डायरेक्ट URL एक्सेस ब्लॉक करता है (404/एरर)
- केवल
Html.Action()याHtml.RenderAction()के माध्यम से कॉल किया जा सकता है RedirectToActionके साथ उपयोग नहीं किया जा सकताUrl.Actionके साथ URL जनरेट नहीं किया जा सकता- फिल्टर एट्रिब्यूट्स (
[Authorize]आदि) चाइल्ड एक्शन्स पर लागू नहीं होते
नोट: ASP.NET Core MVC में ChildActionOnly एट्रिब्यूट मौजूद नहीं है - इसके बजाय View Components का उपयोग करें।