2012-10-11 8 views
5

क्या एचटीएमएल कोड को मौजूदा रेज़र सेक्शन में जोड़ना संभव है? _article.cshtml, मैं नीचे की तरह अनुभाग को परिभाषित किया है -मौजूदा रेजर सेक्शन में HTML कोड संलग्न करें

@RenderSection("BottomSection", required: false) 

और में देखने का एक:

मेरे _layout.cshtml कुछ इस तरह होती है:

नीचे मेरी परिदृश्य है

@section BottomSection 
{ 
<script src='~/Scripts/module/article_details.js' type='text/javascript'></script> 
<script src='~/Scripts/module/modal.js' type='text/javascript'></script> 
@MvcHtmlString.Create(Model.ExtraStuff) 
} 

और _counter.cshtml नामक आंशिक दृश्य में, जो उपर्युक्त दृश्य द्वारा उपयोग किया जाता है; मैं उसी अनुभाग में अधिक HTML कोड जोड़ना चाहता हूं यानी, BottomSection।

मैं आंशिक दृश्य में फिर से BottomSection अनुभाग घोषित करने की कोशिश की:

@section BottomSection{ 
<text>More data</text> 
} 

लेकिन यह बाहर काम नहीं किया।

क्या यह हासिल करने का कोई तरीका है - गतिशील रूप से एमवीसी 4 में पहले से परिभाषित रेज़र अनुभाग में अधिक कोड जोड़ना? कृपया ध्यान दें कि आंशिक दृश्य माता-पिता दृश्य/मॉडल से किसी भी डेटा की अपेक्षा नहीं करता है। और मैं .NET Framework 4.0/VS2010 के साथ एमवीसी 4 का उपयोग कर रहा हूं।

उत्तर

-3

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

jQuery ajax

 $.ajax({ 
      type: 'GET', 
      url: '@Url.Action("Action","Controller")', 
      cache: false, 
      timeout: 20000, 
      contentType: "application/json; charset=utf-8", 
      success: function (_results) { 
       $("#TargetDiv").html(_results); 
      }, 
      error: function (_results) { 

      } 
     }); 
+0

बताओ कृपया क्यों इस समाधान गलत है। मैंने नए जेनरेट किए गए एचटीएमएल को पहले से प्रस्तुत किए गए दृश्य को देखने के लिए कोशिश की है – amesh

+0

आपके उत्तर देने के लिए धन्यवाद, लेकिन यह मैं नहीं करना चाहता था। आंशिक दृश्य अधिक सामग्री/स्क्रिप्ट संदर्भ आदि जोड़ सकता है। डेटा प्राप्त करना एक राउंडट्रिप अनुरोध जोड़ देगा और तब तक मेरा पृष्ठ काम नहीं करेगा! – Kay

-2

शायद का उपयोग कर मुझे नहीं अपने प्रश्न को समझने लेकिन क्यों आप नेस्टेड आंशिक दृश्य का उपयोग कर न प्रयास करें ???

उदाहरण के लिए

:

PartialView1

`<script src='~/Scripts/module/article_details.js' type='text/javascript'></script> 
<script src='~/Scripts/module/modal.js' type='text/javascript'></script> 
@MvcHtmlString.Create(Model.ExtraStuff) 
@{Html.RenderPartial("PartialView2",Model.ExtraStuff);}` 

PartialView2

`<text>More data</text>` 
+0

कई आंशिक विचार होने से इस मुद्दे को हल किया जाएगा। लेकिन, यह मेरे लिए बहुत आंशिक दृश्य फाइलें समाप्त कर देगा - गतिशील दृष्टिकोण के उद्देश्य को खारिज कर देगा। – Kay

0

मैं वर्गों के लिए सामान संलग्न करने का तरीका (वास्तव में मुझे पता है कि अपने आप चाहते हैं) पता नहीं है, लेकिन मुझे एक चाल पता है जो समान परिणाम उत्पन्न कर सकता है। खंडों का उपयोग करने के बजाय कोई TempData का उपयोग कर सकता है। TempData ViewBag की तरह बहुत है, लेकिन एक बार एक चर सेट होने पर यह वर्तमान उपयोगकर्ता के लिए वहां रहेगा जब तक कि कोई इसे फिर से एक्सेस करने का प्रयास नहीं करता है (यह वर्तमान उपयोगकर्ता के लिए कुछ लगातार अनुरोधों के माध्यम से रह सकता है, इसलिए अतिरिक्त सावधानी की सलाह दी जाती है)। नीचे एक उदाहरण है कि इसका उपयोग कैसे किया जा सकता है।

लेआउट में:

@Html.Raw(new MvcHtmlString((string)TempData["BottomSection"])); 

ध्यान में रखते हुए:

@{ 
    var bottomSection = (string)TempData["BottomSection"]; 
    if (bottomSection == null) 
    { 
     bottomSection = ""; 
    } 
    bottomSection += "<script src='~/Scripts/module/article_details.js' type='text/javascript'></script>\n"; 
    bottomSection += "<script src='~/Scripts/module/modal.js' type='text/javascript'></script>\n"; 
    bottomSection += Model.ExtraStuff + "\n"; 
    TempData["BottomSection"] = bottomSection; 
} 

आंशिक दृश्य में:

@{ 
    var bottomSection = (string)TempData["BottomSection"]; 
    if (bottomSection == null) 
    { 
     bottomSection = ""; 
    } 
    bottomSection += "More data"; 
    TempData["BottomSection"] = bottomSection; 
} 

यह आगे उन छद्म वर्गों के लिए एक सहायक लिख कर सुधार किया जा सकता और \ या अनुभागों की सामग्री को एक अलग आंशिक रूप से ले जाकर (नीचे देखें)।

bottomSection += Html.Partial("_StuffToAddToSection").ToString(); 

सहायक वर्ग:

public static class PseudoSectionsHelper 
{ 
    public static MvcHtmlString AppendToPseudoSection<T>(this TempDataDictionary TempData, string sectionName, T model, Func<T, HelperResult> content, bool addNewLineCharacter = true) 
     where T : class 
    { 
     return AppendToPseudoSection(TempData, sectionName, content(model).ToString(), addNewLineCharacter); 
    } 

    public static MvcHtmlString AppendToPseudoSection(this TempDataDictionary TempData, string sectionName, MvcHtmlString content, bool addNewLineCharacter = true) 
    { 
     return AppendToPseudoSection(TempData, sectionName, content.ToString(), addNewLineCharacter); 
    } 

    public static MvcHtmlString AppendToPseudoSection(this TempDataDictionary TempData, string sectionName, string content, bool addNewLineCharacter = true) 
    { 
     var section = (string)TempData[sectionName]; 
     if (section == null) 
     { 
      section = ""; 
     } 
     else if (addNewLineCharacter) 
     { 
      section += "\n"; 
     } 
     section += content; 
     TempData[sectionName] = section; 
     // We return empty MvcHtmlString to be able to use this helper inline (without declaring code block @{ some code... } in view) 
     return new MvcHtmlString(""); 
    } 

    public static MvcHtmlString PseudoSection(this TempDataDictionary TempData, string sectionName) 
    { 
     var section = (string)TempData[sectionName]; 
     return new MvcHtmlString(section); 
    } 
} 

उपयोग उदाहरण

लेआउट जोड़ने में:

@TempData.PseudoSection("BottomSection") 

ध्यान में रखते हुए:

@TempData.AppendToPseudoSection("BottomSection", Model, @<text> 
    <script src='~/Scripts/module/article_details.js' type='text/javascript'></script> 
    <script src='~/Scripts/module/modal.js' type='text/javascript'></script> 
    @MvcHtmlString.Create(Model.ExtraStuff) 
</text>) 

या

@{ 
    TempData.AppendToPseudoSection("BottomSection", Model, @<text> 
     <script src='~/Scripts/module/article_details.js' type='text/javascript'></script> 
     <script src='~/Scripts/module/modal.js' type='text/javascript'></script> 
     @MvcHtmlString.Create(Model.ExtraStuff) 
    </text>); 
} 

या यहाँ तक कि

@TempData.AppendToPseudoSection("BottomSection", Html.Partial("BottomSectionScriptsAndStuff")) 

और आंशिक में:

@TempData.AppendToPseudoSection("BottomSection", "More data") 
+0

TempData के स्थान पर System.Web.HttpContext.Current.Items का उपयोग करना एक बेहतर विचार हो सकता है, क्योंकि TempData तब तक रहता है जब तक आप इसे नहीं पढ़ते हैं जो संभावित रूप से अजीब परिस्थितियों का कारण बन सकता है (जैसे एक अनुभाग जिसे आपने प्रस्तुत नहीं किया एक पेज पर, दूसरे पर प्रस्तुत करता है)। – jahu

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