2011-12-20 11 views
32

मेरी समस्या यह है कि @RenderSection को नेस्टेड टेम्पलेट से @RenderSection बेस टेम्पलेट में परिभाषित किया गया है। वर्तमान में, मेरे पास एक नेस्टेड बेस टेम्पलेट है जो कि एक बच्चे टेम्पलेट से जुड़ा हुआ है जिसे तब दृश्य पृष्ठों में उपयोग किया जाता है। जब मैं बेस टेम्पलेट में @RenderSection को परिभाषित करता हूं और इसे दृश्य पृष्ठों में प्रस्तुत करता हूं तो यह एक त्रुटि फेंकता है।@ नेस्टरेड रेजर टेम्पलेट्स में रेंडरसेक्शन

यहां सही समस्या है।

मैं कस्टम स्क्रिप्ट डालने की अनुमति देने के लिए एक रेंडरसेक्शन बनाना चाहता हूं। मेरे आधार टेम्पलेट ....

<!DOCTYPE html> 
<html> 
<head> 
<title>@ViewBag.Title</title> 
@RenderSection("HeaderContent", false) // The region of the header scripts (custom css) 

</head> 
<body> 
@RenderBody() 
</body> 
</html> 

मैं तो बच्चे टेम्पलेट को छोड़ के रूप में मैं वहाँ में किसी भी कस्टम सिर कोड डाल दिया और पृष्ठ स्वयं पर लागू करने के लिए नहीं करना चाहते हैं ..

@section HeaderContent { 
    <script>alert("hi");</script> 
} 

मेरी समस्या यह है कि मैं अपने सामान्य पृष्ठों से बेस टेम्पलेट में कस्टम हेड कोड जोड़ने की प्रतीत नहीं कर सकता।

निम्नलिखित अनुभागों को परिभाषित किया गया है लेकिन लेआउट पेज ~/Views/Shared/OneColLayer.cshtml": "HeaderContent के लिए प्रस्तुत नहीं किया गया है।

क्या मुझे व्यू पेज में बेस टेम्पलेट में पॉइंटर शामिल करने की आवश्यकता है?

@{ 
    Layout = "~/Views/Shared/BaseTemplate.cshtml"; 
} 

मेरा नया आधार टेम्पलेट

<head> 
    <link rel="stylesheet" type="text/css" href="@Url.Content("~/content/layout.css")" /> 
    <link rel="stylesheet" type="text/css" href="@Url.Content("~/content/global.css")" /> 
    <script type="text/javascript" src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")"></script> 
    <script type="text/javascript" src="@Url.Content("~/js/fadeInFadeOut.js")"></script> 
    <title>@ViewBag.Title</title> 
    @RenderSection("HeaderContent", false) 
</head> 
<body> 
    @RenderBody() 
</body> 

अपने नए बच्चे टेम्पलेट

@{ 
    Layout = "~/Views/Shared/BaseTemplate.cshtml"; 
} 
@RenderSection("HeaderContent", false) 
@RenderBody() 

मेरे विचार

@{ 
    ViewBag.Title = "Home"; 
    Layout = "~/Views/Shared/OneColLayer.cshtml"; 
} 
@section HeaderContent { 
    <h1>Left Content</h1> 
} 
<div>my view content</div> 

सामग्री अब oneCol टेम्पलेट आधार टेम्पलेट में रखी हो जाता है ।

परिणाम ...

<div id="Content"> 
    <h1>Left Content</h1> 
</div> 

उत्तर

50

आप वर्गों है कि मध्यम टेम्पलेट में के माध्यम से पारित करने की अनुमति है निर्दिष्ट करने के लिए की जरूरत है।

BaseTemplate.cshtml

<!DOCTYPE html> 
<html> 
    <head> 
    <title>@ViewBag.Title</title> 
    @RenderSection("HeaderContent", false) @* The region of the header scripts (custom css) *@ 
    </head> 
<body> 
    @RenderBody() 
</body> 
</html> 

संपादित

अपने नए बच्चे टेम्पलेट

@{ 
    Layout = "~/Views/Shared/BaseTemplate.cshtml"; 
} 
@section HeaderContent { 
    @RenderSection("HeaderContent", false) 
} 
@RenderBody() 

आप आधार टेम्पलेट से कोई अनुभाग के अंदर अनुभाग प्रस्तुत करना रखते हैं, यह उस अनुभाग को सही जगह पर प्रस्तुत करेगा आधार टेम्पलेट।


View.cshtml -> MiddleLayout.cshtml का उपयोग करता है के रूप में यह लेआउट

@section HeaderContent 
{ 
    <!-- header content that will now render --> 
} 

<!-- page content --> 
+0

है मैं इस विधि कर की कोशिश की है। लेकिन मेरे दृश्य में सामग्री टेम्पलेट पर प्रदर्शित होती है जो इसे मूल टेम्पलेट नहीं देती है। –

+0

@JamesAndrewSmith आपके संपादन के अनुसार, यह आपके मध्य टेम्पलेट पर दिखाई दे रहा है क्योंकि आप अपने प्रस्तुत अनुभाग के अंदर मध्य टेम्पलेट में '@ रेंडरसेक्शन' नहीं डाल रहे हैं। मैं आपको यह दिखाने के लिए मेरा संपादन करूंगा कि आपका क्या दिखना चाहिए। –

+0

मेरे लिए अच्छी तरह से काम किया – Jacques

संबंधित मुद्दे