Ответ, предоставленный Pure.Krome, безупречен для MVC2, но рассмотрим синтаксис Razor:
@Html.Raw(System.Web.HttpUtility.HtmlDecode(Model.yourEncodedHtmlFromYourDatabase))
В качестве альтернативы,
@Html.Raw(Server.HtmlDecode(Model.yourEncodedHtmlFromYourDatabase))
То, что вы описываете, это «серверный толчок», который в наши дни часто называют «COMET». Использование этих ключевых слов в веб-поиске должно предоставить много полезной информации.
Наиболее распространенный метод для этого называется "зависающий GET". Клиент отправляет запрос GET на конкретный URL-адрес, и сервер принимает соединение, но задерживает отправку ответа до тех пор, пока у него не появятся данные для отправки. Когда клиент получает ответ, он отправляет еще один запрос GET, чтобы он был готов к другому сообщению.
Вы можете использовать обратные вызовы WCF - это веб-сервис, в котором вы можете подписаться на уведомления от клиента, и сервер будет отправлять сообщения подписанным клиентам. В моем блоге есть руководство для начинающих .
Вас может заинтересовать вопрос SO . То, что вы описываете, похоже на приложение Comet - отправка сервера клиенту.
Если вы можете оставить сокет открытым, клиент может подключиться к серверу, а сервер может просто передать данные в сокет, когда это необходимо. Нет причин, по которым сторона, инициирующая соединение, всегда должна инициировать передачу данных.
Проверьте WebSync; это Comet-решение для ASP.NET/IIS, но также доступен полный .NET-клиент, который позволяет интегрироваться с толстыми клиентами, оконными службами и т.д. Так что, похоже, что это должно довольно хорошо вписываться в счет.