Ho il seguente come parte di una vista del modello che popola una vista parziale:Link rottura quando View Serialized
public string DownloadLink
{
get
{
UrlHelper url = new UrlHelper(HttpContext.Current.Request.RequestContext);
switch (this.Type)
{
case (int)DocumentTypes.WasteNote: {
return url.Action("PaperWork", "Jobs", new { JobId = this.DOCJobId }, HttpContext.Current.Request.IsSecureConnection ? "https" : "http");
}
case (int)DocumentTypes.Contract:
case (int)DocumentTypes.DestructionCert:
case (int)DocumentTypes.Quote:
default: { return url.Action("Download", "Documents", new { DocId = this.DocumentLinkId }, HttpContext.Current.Request.IsSecureConnection ? "https" : "http"); }
}
}
}
Chiamato nella visualizzazione così:
@model IEnumerable<Document>
@using CustomerDashboard.ViewModels;
@using CustomerDashboard.Utilities;
@{ Layout = null; }
@foreach (Document doc in Model)
{
<li>
<a href="@doc.DownloadLink" class="documentDownload">
<div class="col-sm-12 col-md-5 li-row li-row-icon">
<div class="pull-left">
<img height="40" src="/Content/img/file-icons/@doc.Icon" />
</div>
...
</a>
</li>
}
Mentre questo viene reso direttamente un altro Visualizza il collegamento generato va bene, tuttavia sto serializzando il partial e restituendo come JSON:
public string RenderRazorViewToString(string viewName, object model)
{
//https://gist.github.com/timiles/2828976
ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext,
viewName);
var viewContext = new ViewContext(ControllerContext, viewResult.View,
ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}
E 'poi tornato come JSON dal controller:
return Json(new {
totalCount = (int)Session["DocumentTotalCount"],
markup = RenderRazorViewToString("_DocumentListAjax", docs)
},JsonRequestBehavior.AllowGet);
essere chiaro, però, il problema sta accadendo prima della serializzazione JSON - questo è brutto, ma elimina il prefisso www:
return Json(new {
totalCount = (int)Session["DocumentTotalCount"],
markup = RenderRazorViewToString("_DocumentListAjax", docs).Replace("www.","")
},JsonRequestBehavior.AllowGet);
Nel fare questo , da quello che sembra essere al di fuori della LAN (che suona strano), tutti gli URL hanno anteposto www - ovvero https://example.com diventa https://www.example.com. Sto facendo fatica a rintracciare perché questo sta accadendo e come risolverlo.
Come si ottiene questo risultato in JSON? –
@ MichałKędrzyński Ho modificato la domanda – SWa
quale URL stai usando per la chiamata ajax o come viene generato l'url per la chiamata ajax? È un URL completo o solo un url relativo? – Kevin