Вы можете использовать частичное представление, которое основано на модели, которая в интерфейсе, предоставляющем метод Render.
В вашем ActionResult вы возвращаете конкретный экземпляр этого интерфейса, который является правильным типом длясодержимое, которое вы хотите отобразить.
проблема, конечно, заключается в том, что вам необходимо сгенерировать содержимое в методе Render с использованием Html.Raw или чего-то подобного, поскольку фактический html внутри собственно View является статическим.
Но тогда само представление будет выглядеть примерно так:
@Html.Raw(Model.Render())
без какого-либо поддерживающего HTML или просто с обычным HTML, который, по вашему мнению, будет согласованным для всех типов контента.
Обновление: у вас будет интерфейс
public interface ContentView
{
public string Render();
}
И у вас будет, например, 2 класса, расширяющих этот интерфейс:
public class TextView : ContentView
{
public string Render()
{
return "TextView!";
}
}
И
public class HtmlView : ContentView
{
public string Render()
{
return "<strong>HtmlView!</strong>";
}
}
И ваш частичный вид называется ContentView
@model ContentView
@Html.Raw(Model.Render());
Затем ваш ActionResult в вашем контроллере:
public ActionResult ShowPosts()
{
List<ContentView> posts = PostRepository.GetPosts();
return posts;
}
И ваш основной вид:
@model List<ContentView>
@foreach(var contentView in Model) {
@Html.PartialView("ContentView", contentView);
}
Надеюсь, это прояснитэто немного;вам, очевидно, нужно адаптировать эти концепции к вашему посту;но это позволяет вам маскировать все ваши сообщения в списке типа интерфейса, тогда фактическое преобразование типа контента не нужно переключать или повторять, вы будете использовать полиморфизм.