मैं वर्गों के लिए सामान संलग्न करने का तरीका (वास्तव में मुझे पता है कि अपने आप चाहते हैं) पता नहीं है, लेकिन मुझे एक चाल पता है जो समान परिणाम उत्पन्न कर सकता है। खंडों का उपयोग करने के बजाय कोई 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")
बताओ कृपया क्यों इस समाधान गलत है। मैंने नए जेनरेट किए गए एचटीएमएल को पहले से प्रस्तुत किए गए दृश्य को देखने के लिए कोशिश की है – amesh
आपके उत्तर देने के लिए धन्यवाद, लेकिन यह मैं नहीं करना चाहता था। आंशिक दृश्य अधिक सामग्री/स्क्रिप्ट संदर्भ आदि जोड़ सकता है। डेटा प्राप्त करना एक राउंडट्रिप अनुरोध जोड़ देगा और तब तक मेरा पृष्ठ काम नहीं करेगा! – Kay