खोज…


व्यू कंपोनेंट बनाएं

देखें घटक तर्क और विचारों के पुन: प्रयोज्य टुकड़ों को कूटबद्ध करते हैं। वे द्वारा परिभाषित कर रहे हैं:

  • एक ViewComponent वर्ग जो देखने के लिए डेटा तैयार करने और देखने के लिए तर्क तैयार करने के लिए तर्क देता है।
  • एक या एक से अधिक दृश्य

चूँकि उनमें तर्क होते हैं, वे आंशिक विचारों की तुलना में अधिक लचीले होते हैं, जबकि अभी भी चिंताओं के एक अच्छे अलगाव को बढ़ावा देते हैं।

एक सरल कस्टम दृश्य घटक को निम्न के रूप में परिभाषित किया गया है:

public class MyCustomViewComponent : ViewComponent
{        
    public async Task<IViewComponentResult> InvokeAsync(string param1, int param2)
    {
        //some business logic

        //renders ~/Views/Shared/Components/MyCustom/Default.cshtml
        return View(new MyCustomModel{ ... });
    }
}

@*View file located in ~/Views/Shared/Components/MyCustom/Default.cshtml*@
@model WebApplication1.Models.MyCustomModel
<p>Hello @Model.UserName!</p>

उन्हें किसी भी दृश्य से प्राप्त किया जा सकता है (या ViewComponentResult एक नियंत्रक भी)

@await Component.InvokeAsync("MyCustom", new {param1 = "foo", param2 = 42})

लॉगिन घटक देखें

डिफ़ॉल्ट प्रोजेक्ट टेम्प्लेट आंशिक दृश्य _LoginPartial.cshtml बनाता है, जिसमें यह पता लगाने के लिए थोड़ा तर्क होता है कि उपयोगकर्ता लॉग इन है या नहीं और इसका उपयोगकर्ता नाम पता करें।

चूंकि एक दृश्य घटक एक बेहतर फिट हो सकता है (जैसा कि तर्क में शामिल है और यहां तक कि 2 सेवाओं को इंजेक्ट किया गया है) निम्न उदाहरण दिखाता है कि लॉगपार्टियल को एक दृश्य घटक में कैसे परिवर्तित किया जाए।

घटक वर्ग देखें

public class LoginViewComponent : ViewComponent
{
    private readonly SignInManager<ApplicationUser> signInManager;
    private readonly UserManager<ApplicationUser> userManager;

    public LoginViewComponent(SignInManager<ApplicationUser> signInManager, UserManager<ApplicationUser> userManager)
    {
        this.signInManager = signInManager;
        this.userManager = userManager;
    }

    public async Task<IViewComponentResult> InvokeAsync()
    {
        if (signInManager.IsSignedIn(this.User as ClaimsPrincipal))
        {                
            return View("SignedIn", await userManager.GetUserAsync(this.User as ClaimsPrincipal));
        }
        return View("SignedOut");
    }
}

साइन इन किया गया दृश्य (~ / दृश्य / साझा / घटक / लॉगिन / साइन इन किया गया .shtml)

@model WebApplication1.Models.ApplicationUser

<form asp-area="" asp-controller="Account" asp-action="LogOff" method="post" id="logoutForm" class="navbar-right">
    <ul class="nav navbar-nav navbar-right">
        <li>
            <a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Hello @Model.UserName!</a>
        </li>
        <li>
            <button type="submit" class="btn btn-link navbar-btn navbar-link">Log off</button>
        </li>
    </ul>
</form>

SignedOut दृश्य (~ में / दृश्य / साझा / घटक / लॉगिन / SignedOut.cshtml)

<ul class="nav navbar-nav navbar-right">
    <li><a asp-area="" asp-controller="Account" asp-action="Register">Register</a></li>
    <li><a asp-area="" asp-controller="Account" asp-action="Login">Log in</a></li>
</ul>

_Layout.cshtml से मंगलाचरण

@await Component.InvokeAsync("Login")

कंट्रोलर एक्शन से वापसी

जब फ्रेमवर्क द्वारा प्रदान किए गए आधार Controller वर्ग से विरासत में मिला है, तो आप कार्रवाई के एक दृश्य घटक को वापस करने के लिए सुविधा विधि ViewComponent() का उपयोग कर सकते हैं:

public IActionResult GetMyComponent()
{
    return ViewComponent("Login", new { param1 = "foo", param2 = 42 });
}

नियंत्रक के रूप में POCO वर्ग का उपयोग करने पर, आप मैन्युअल रूप से ViewComponentResult वर्ग का एक उदाहरण बना सकते हैं। यह ऊपर दिए गए कोड के बराबर होगा:

public IActionResult GetMyComponent()
{
    return new ViewComponentResult 
    { 
        ViewComponentName = "Login",
        Arguments = new { param1 = "foo", param2 = 42 } 
    };
}


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow