Мне нужно уметь возвращать частичный вид как string в моем приложении MVC через signalR. Я использую хабы.signalR отправить часть результата результата с помощью концентратора
Я использую следующий метод, чтобы вернуть часть строки вида (из here):
public static string RenderPartialView(string controllerName, string partialView, object model)
{
var context = httpContextBase as HttpContextBase;
var routes = new RouteData();
routes.Values.Add("controller", controllerName);
var requestContext = new RequestContext(context, routes);
string requiredString = requestContext.RouteData.GetRequiredString("controller");
var controllerFactory = ControllerBuilder.Current.GetControllerFactory();
var controller = controllerFactory.CreateController(requestContext, requiredString) as ControllerBase;
controller.ControllerContext = new ControllerContext(context, routes, controller);
var ViewData = new ViewDataDictionary();
var TempData = new TempDataDictionary();
ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, partialView);
var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
Для этого метода на работу, мне нужно HttpContext.Current
поэтому в моем OnConnected (я заметил, что это всегда существует) Я его так:
public class TaskActionStatus : Hub
{
private static HttpContextBase httpContextBase;
...
public override Task OnConnected()
{
httpContextBase = new HttpContextWrapper(HttpContext.Current) as HttpContextBase;
...
, а затем я использую его в моем методе RenderPartialView:
var context = httpContextBase as HttpContextBase;
Таким образом, у меня всегда есть доступ к текущему HttpContext. Однако я заметил, что иногда моя статическая копия HttpContext имеет значение null. Почему это?.
- Какой лучший подход здесь?
- Есть ли способ сделать частичный просмотр без HttpContext?
Вы не вернете вид из центра, если вам нужно то, что вы делаете что-то неправильно. – davidfowl
Я не возвращаю просмотров. Я возвращаю строку. (просмотр строки) – ShaneKm
И вы пытаетесь позвонить в трубу mvc из SingalR? – davidfowl