c# - किसी नियंत्रक से डेटा को लेआउट में भेजने का सर्वोत्तम अभ्यास क्या है?



asp.net-mvc model (1)

वर्तमान में मेरे पास एक MVC साइट है जिसकी हर पेज के शीर्ष पर गतिशील सामग्री है।

वर्तमान में मैं नियंत्रक में आवश्यक डेटा प्राप्त करता हूं और इसे एक दृश्य मॉडल में रखता हूं। दृश्य में, मैं डेटा लेता हूं और व्यूबैग में टेम्प्लेट पार्ट्स को छूता हूं और आखिरकार, मुख्य लेआउट पृष्ठ पर, मैं व्यूबैग डेटा लेता हूं और इसे आंशिक रूप से पास करता हूं जो हेडर को नियंत्रित करता है।

मैंने पढ़ा है कि मुझे जहां संभव हो वोबबैग का उपयोग नहीं करना चाहिए और जब मैं डेटा राउंड पास करता हूं, तब तक सही नहीं लगता है।

मैं इसे सुधारने के बारे में सोच सकता हूं एकमात्र तरीका मुख्य लेआउट पर एक अनुभाग बनाना है, और फिर आंशिक / डेटा को दृश्य के अनुभाग में रखना है - हालांकि, 30 पृष्ठों हैं और यह फिर से ऐसा नहीं लगता है सही मार्ग

क्या यह करने का एक बेहतर तरीका है / जो गतिशील डेटा लेने के लिए सर्वोत्तम प्रथाएं हैं जिन्हें मुख्य दृश्य पर जाना है?


आप यह बाल क्रियाओं के साथ कर सकते हैं आप इस क्रिया का पुन: उपयोग कर सकते हैं और यहां तक ​​कि इसे _Layout पृष्ठ में शामिल कर सकते हैं।

कुछ शीर्ष लेख जानकारी प्रदर्शित करने के लिए यहां एक बाल कार्रवाई की गई है। यह ChildActionOnly रूप में चिह्नित है इसलिए केवल इसे दूसरे दृश्य में ही कहा जा सकता है। 5 मिनट के लिए परिणाम बचाने के लिए OutputCache का भी लाभ लेता है।

[ChildActionOnly]
[OutputCache(Duration = 5 * 60)]
public ActionResult Header(string section)
{
    var info = new HeaderInfo
    {
        Section = section,
        Today = DateTime.Now
    };
    return PartialView("_header", info);
}

_header.cshtml

@model HeaderInfo
<div>
    <span>@Model.Section</span>
    <span>@Model.Today.ToLongTimeString()</span>
</div>

उसके बाद इसे Html.Action () या .RenderAction () के साथ दृश्य या लेआउट में उपयोग करें।

@Html.Action("Header", "Home", new { section = "Cake" })
// or
@{Html.RenderAction("Header", "Home", new { section = "Pie" });}

आप अपने लेआउट के अंदर किसी अनुभाग को निर्दिष्ट कर सकते हैं, यदि दृश्य में उपस्थित हो तो सशर्त रेंडर करें।

_Layout.cshtml

@RenderSection("header", required: false)

प्रमुख राय

@section header {
    @{Html.RenderAction("Header", "Home", new { section = "Cake" })}
}




asp.net-mvc-viewmodel