Это можно решить с помощью бритвенных помощников. Это своего рода элегантно-хакерский ™, но он сделал работу для меня.
Итак, в родительском представлении вы определяете помощника:
@helper HtmlYouWantRenderedInAPartialView()
{
<blink>Attention!</blink>
}
Затем при рендеринге частично вы передаете этому помощнику
@Html.Partial("somePartial", new ViewDataDictionary { { "OptionalSection1", (Func<HelperResult>)(HtmlYouWantRenderedInAPartialView) } })
Затем в частичном представлении вы называете этого помощника следующим образом:
<div>@ViewData.RenderHelper("OptionalSection1")</div>
Наконец, вам нужен этот метод расширения для упрощения «вызывающей» части
public static HelperResult RenderHelper(this ViewDataDictionary<dynamic> viewDataDictionary, string helperName)
{
Func<HelperResult> helper = viewDataDictionary[helperName] as Func<HelperResult>;
if (helper != null)
{
return helper();
}
return null;
}
Таким образом, весь смысл в том, чтобы передать делегату этого помощника, а затем, когда дочернее представление вызывает его, содержимое отображается в том месте, где вы хотите.
Конечный результат дочернего представления будет выглядеть следующим образом
<div><blink>Attention!</blink></div>