SSRS 2005에서도 여전히 이러한 현상이 발생하는지 확인할 수 있습니다. Firefox가 보고서 디자이너가 의도 한대로 렌더링하지 않는 유일한 브라우저는 아닙니다. 분명히 IE7 (그리고 아마도 IE6)은 엘리먼트에 할당 된 여러 스타일 속성이있는 경우 "승리"하는 마지막 스타일 속성을 가정합니다. 표준 모드와 IE8에서 IE8은이 상황에서 "승리"하는 첫 번째 스타일 속성을 가정합니다. 나는 우리 팀이 이것을 테스트하지는 않았지만 모든 표준 준수 브라우저가 IE8과 Firefox와 같은 선택을 할 것이라고 생각합니다.
핫픽스 측면에서 해결책을 찾지 못했지만 나쁜 HTML이 브라우저에 표시되지 않도록하는 방법이 있습니다. OMG Ponies - JudyX의 게시물에 대한 링크를 게시 해 주셔서 감사합니다. Wodeh는 포스트에 대한 3/4의 좋은 해결책으로 답했습니다. 불행하게도, 게시 된 코드를 사용하는 방법은 완전히 명확하지 않았습니다.
접근 방식은 ReportViewer Control이 들어있는 페이지에서 response filter을 사용하는 것입니다. 필터는 브라우저로 전송되는 원시 HTML에 대한 액세스 권한을 가지며 새로운 첫 번째 열 트릭을 수행하지 않고 HTML을 직접 수정할 수있는 기회를 제공합니다. Page_Load 메서드에서 Response를 설정합니다.다음 코드를 사용하여 속성을 필터링 :
protected void Page_Load(object sender, EventArgs e)
{
Response.Filter = new CorrectSSRSIssuesResponseFilter(Response.Filter);
if (!IsPostBack) {
RenderReport();
}
}
CorrectSSRSIssuesResponseFilter 클래스는 다음과 같이 정의되며, 주로 포스트에서 Wodeh의 코드를 기반으로한다.
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace Reports
{
public class CorrectSSRSIssuesResponseFilter : Stream
{
private Stream _sink;
private StringBuilder Output = new StringBuilder();
public CorrectSSRSIssuesResponseFilter(Stream sink)
: base()
{
_sink = sink;
}
public CorrectSSRSIssuesResponseFilter()
: base()
{
_sink = new MemoryStream();
}
public override bool CanRead { get { return true; } }
public override bool CanSeek { get { return true; } }
public override bool CanWrite { get { return true; } }
public override void Flush()
{
_sink.Flush();
}
public override long Length
{
get { return _sink.Length; }
}
public override long Position
{
get
{ return _sink.Position; }
set
{ _sink.Position = value; }
}
public override int Read(byte[] buffer, int offset, int count)
{
return _sink.Read(buffer, offset, count);
}
public override long Seek(long offset, SeekOrigin origin)
{
return _sink.Seek(offset, origin);
}
public override void SetLength(long value)
{
_sink.SetLength(value);
}
public override void Write(byte[] buffer, int offset, int count)
{
string strBuffer = UTF8Encoding.UTF8.GetString(buffer, offset, count);
//A Closing HTML tag indicates the response object has finished recieving the entire content of the page
strBuffer = System.Text.RegularExpressions.Regex.Replace(
strBuffer
, "<TD style=\"[^\"]*\" style=(?<goodStyle>\"[^\"]*\")>"
, "<TD style=${goodStyle}>"
, System.Text.RegularExpressions.RegexOptions.Compiled
);
buffer = System.Text.Encoding.UTF8.GetBytes(strBuffer);
_sink.Write(buffer, offset, buffer.Length);
}
}
}
페이지 생성이 잘못된 HTML 요소에 스타일 속성을 도입하는 것을 중지시키는 CSS에서 최소 높이를 정의하는 방법은 무엇입니까? –