私は(実際に私は自分自身ことを知っていただきたいと思います)のセクションにコンテンツを追加する方法がわかりません、私は同様の結果を生むかもしれないトリックを知っています。セクションを使用する代わりに、TempDataを使用できます。 TempDataはViewBagとよく似ていますが、変数が設定されると、現在のユーザーがそれに再度アクセスしようとするまでそこに存在します(現在のユーザーのためにいくつかの連続した要求があるため、余分な注意が必要です)。以下はその使用方法の例です。レイアウトで
:部分図で
@{
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;
}
:鑑み
@Html.Raw(new MvcHtmlString((string)TempData["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")
このソリューションは間違っている理由を教えてください。私は、既にレンダリングされたビューに新たに生成されたhtmlを追加するために同じことを試みました – amesh
あなたにお返事ありがとうございますが、これは私がしたかったものではありません。部分的なビューでは、より多くのコンテンツ/スクリプト参照などを追加することができます。データを取得すると、往復のリクエストが追加され、それまでのページは機能しません。 – Kay