J'utilise le service WCF dans MVC et j'ai besoin partiel HTML de vue dans le service WCF lorsque certaines méthodes de service WCF appelé.La valeur ne se situe pas dans la fourchette attendue dans MVC avec WCF Service
J'utilise le code ci-dessous dans mon service WCF pour rendre le code HTML mais je ne parviens pas à le faire car j'obtiens une erreur «la valeur ne se situe pas dans la plage attendue» dans la ligne «viewResult.View.Render».
public static string RenderRazorViewToString(string viewPath, object model, HttpContextBase context, Guid? tenantId)
{
try
{
using (var controller = new BaseController())
{
if (context == null)
{
Logger.Error(
"RenderRazorViewToString context is null.Empty string returned.",
new Exception("context is null."));
return string.Empty;
}
var routeData = new RouteData();
routeData.Values.Add("controller", "Base");
controller.ControllerContext = new ControllerContext(context, routeData, controller);
controller.ViewBag.TenantId = tenantId;
return controller.RenderRazorViewToString(viewPath, model);
}
}
catch (Exception ex)
{
Logger.Error("RenderRazorViewToString", ex);
return string.Empty;
}
}
public static string RenderRazorViewToString(this Controller controller, string viewPath, object model)
{
try
{
BrowserOverrideStores.Current = new CustomBrowserOverrideStore();
controller.ViewData.Model = model;
using (var stringWriter = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewPath);
var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, stringWriter);
viewResult.View.Render(viewContext, stringWriter);
viewResult.ViewEngine.ReleaseView(controller.ControllerContext, viewResult.View);
return stringWriter.GetStringBuilder().ToString();
}
}
catch (Exception ex)
{
Logger.Error("RenderRazorViewToString Extension Method", ex);
return string.Empty;
}
}
J'appelle méthode ci-dessus comme:
var result = RenderRazorViewToString(@"~/Views/RealTimeView/BaysContainers/_BayEntry.cshtml", realTimeInfo, new HttpContextWrapper(System.Web.HttpContext.Current))
Vue partielle
@using CloudAmber.DSMS.DataClasses
@model CloudAmber.DSMS.DataClasses.RealTimeBayInfo
<div>
@if (Model.Fleets != null)
{
foreach (var item in Model.Fleets)
{
<li id="@[email protected]@item.DutyBoardNumber" @(item.IsAllocated ? "allocatedbus" : "unallocatedbuses") data-bayidcontainer="@Model.BayID" @(item.IsAllocated ? FiltersType.CirculatingBuses.ToString() : "")>
<span class="IconDiv">
<a style="cursor: pointer;" id="[email protected]()" data-fleetnumber="@item.FleetNumber" data-vehiclebase="true" data-bayid="@Model.BayID" data-bayidentifier="@Model.BayIdentifier" data-baycode="@Model.BayCode"
data-operatorcode="@item.OperatorCode" data-ismanagebus="true">
@{
var color = item.IsAllocated ? "#000" : "#f00";
}
<i class="fa fa-bus" style="font-size:20px;color:@color"></i>
</a>
</span>
@{
string articulatedBus = string.Empty;
if (item.VehicleType == VehicleType.Articulated)
{
articulatedBus = MessageResource.ArticulatedFleetPostfix;
}
}
<span class="BusNo" title="@Resource.FleetNo - @Resource.PublicServiceCode">
@Html.GetValueOrNa(item.FleetNumber) - @Html.GetValueOrNa(item.PublicServiceCode) @articulatedBus
</span>
</li>
}
}
<input type="hidden" id="[email protected]" value="@(Model.PredictedDepartureDateTime.HasValue ? Model.PredictedDepartureDateTime.Value.ToString("o") : string.Empty)" />
<input type="hidden" id="[email protected]" value="@(Model.ScheduledDepartureDateTime.HasValue ? Model.ScheduledDepartureDateTime.Value.ToString("o") : string.Empty)" />
</div>
Je suis confus au sujet de votre question: utilise un service wcf pour servir des fichiers html, en utilisant spécialement rasoir? –
Il doit exploser dans le code View quelque part. Pouvez-vous le déboguer et chercher une exception interne qui pourrait vous donner une idée d'où? –
Il n'y a pas d'exception interne. Oui, j'utilise le service WCF pour traiter les fichiers html. – PrinceT