7

Używam ReportViewer 10.0. W przeglądarce Google Chrome wiersze mają uszkodzony obraz o nazwie blank.gif. Ale IE i Firefox działają dobrze.ReportViewer pokazujący uszkodzone obrazy w Chrome

Oto przykład z obrazami krążył:

Screnshot

Wszelkie pomysły jak to naprawić?

+0

Jest [pytanie indywidualne dla IE11] (http: // stackoverflow. com/q/21993721/419956) z tą samą przyczyną, ale z zupełnie innymi symptomami (IE11 po prostu zawiesza się). – Jeroen

Odpowiedz

2

Obecne rozwiązanie zamaskuje problem, ale nie rozwiąże podstawowego problemu, który polega na tym, że gdy przeglądarki oprócz IE komponują żądanie dla gif (którego SSRS właśnie używa do zastąpienia padding), nie wiedzą dołączyć parametr ciągu zapytania o numerze IterationId.

Jak SQL Reporting Services Viewer broken in Non-IE Browsers zwraca uwagę, jeśli używasz ReportViewer, można rozwiązać ten problem w swoim routingiem aplikacji pod Application_BeginRequest tak:

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    // Original fix credit to Stefan Mohr 
    // Bug fix for MS SSRS Blank.gif 500 server error missing parameter IterationId 
    // https://connect.microsoft.com/VisualStudio/feedback/details/556989/ 
    HttpRequest req = HttpContext.Current.Request; 
    if (req.Url.PathAndQuery.StartsWith("/Reserved.ReportViewerWebControl.axd") && 
     !req.Url.ToString().ToLower().Contains("iteration") && 
     !String.IsNullOrEmpty(req.QueryString["ResourceStreamID"]) && 
     req.QueryString["ResourceStreamID"].ToLower().Equals("blank.gif")) 
    { 
     Context.RewritePath(String.Concat(req.Url.PathAndQuery, "&IterationId=0")); 
    } 
} 
+0

Możesz uniknąć trafienia wydajności 'ToLower()' używając 'IndexOf': ' req.Url.ToString(). IndexOf ("IterationId" , StringComparison.OrdinalIgnoreCase) <0' 'ToLower()' tworzy nowy ciąg po wywołaniu. –

+0

@ D-Money, czytelność wpływa na mikrooptymalizację - * zawsze *. Powiedziawszy to, możesz zrobić rozróżnianie wielkości liter bez potrzeby używania indeksu przy użyciu ['String.Equals (a, b, StringComparison.OrdinalIgnoreCase) '] (https://msdn.microsoft.com/en-us/library/t4411bks.aspx) – KyleMit

+0

Zgadzam się na przedwczesną optymalizację. Pomyślałem, że to jest warte komentarza, ponieważ ten kod działa na każde żądanie. Ponadto mój kod zastępuje kod Contains, a nie kod Equals. –

0

w moim przypadku jego odpowiedź nie działa w trybie testowym (localhost) , ale poprawiłem i teraz działa, zamiast wstawiania "StartsWith" umieszczam "Contains". Jest to kod:

Protected Sub Application_BeginRequest(sender As Object, e As EventArgs) 
     ' Original fix credit to Stefan Mohr 
     ' Bug fix for MS SSRS Blank.gif 500 server error missing parameter IterationId 
     ' https://connect.microsoft.com/VisualStudio/feedback/details/556989/ 
     Dim req As HttpRequest = HttpContext.Current.Request 
     If req.Url.PathAndQuery.Contains("/Reserved.ReportViewerWebControl.axd") AndAlso Not req.Url.ToString().ToLower().Contains("iteration") AndAlso Not [String].IsNullOrEmpty(req.QueryString("ResourceStreamID")) AndAlso req.QueryString("ResourceStreamID").ToLower().Equals("blank.gif") Then 
      Context.RewritePath([String].Concat(req.Url.PathAndQuery, "&IterationId=0")) 
     End If 
    End Sub 

Nadzieję pomóc,

+0

musisz umieścić ten kod w Global.asax (w asp.net - VB) lub w Global.asax.cs w C# – SohamHck

0

rozwiązania: wykorzystanie prostokąty/otaczaniem/komórki Tablix i tylko jeden z ich granic pokazano. Działa na chrome. W przypadku OP może dodawać dodatkowe kolumny jako odstępniki między kolumnami danych i pominąć je dla nich.

0

W innych odpowiedzi, mam rozwiązać ten problem dodając następujący kod do mojego pliku Global.asax:

void Application_BeginRequest(object sender, EventArgs e) 
{ 
    //The following code is a hack for stopping a broken image from magically appearing on SSRS reports in chrome 
    //where ever a line is used in the report. 
    Uri u = HttpContext.Current.Request.Url; 

    //If the request is from a Chrome browser 
    //AND a report is being generated 
    //AND there is no QSP entry named "IterationId" 
    if (HttpContext.Current.Request.Browser.Browser.ToLower().Contains("chrome") && 
    u.AbsolutePath.ToLower().Contains("reserved.reportviewerwebcontrol.axd") && 
    !u.Query.ToLower().Contains("iterationid")) 
     HttpContext.Current.RewritePath(u.PathAndQuery + "&IterationId=0"); 
} 

Ale, może przeoczył lub nie masz plik global.asax, jak to się stało Dla mnie. Wybierz swoje rozwiązanie i przejdź do:

File > New > File > Web > C#/VB.Net > Global Application Class 

Zapisz jako Global.asax, wklej kod, a to rozwiąże Twój problem.

0

Miałem ten sam błąd z ReportViewer wersji 10 więc mogę zaktualizować do wersji 14, to rozwiązać problem i uzyskać pewne ulepszenia compelte przewodnik here

Powiązane problemy