3

我看到了一个非常奇怪的 asp.net 渲染问题。我在 .aspx 的相关部分中确实有这个(只是替换了路径和控件的名称):

<div id="header">
 <% if (SiteSettings.SiteName.Equals("sx") || SiteSettings.SiteName.Equals("sw"))
    { %>
        <sc:sublayout runat="server" renderingid="{B04CFA1A-6B5B-49D3-8000-339DBE9899C1}"
          path="/layouts/AX/HeaderSublayout.ascx" id="AXHeader" placeholder="content"></sc:sublayout>
 <% }
    else
    { %><!-- bla1 --><ax:strangeBehavingControl id="HeaderInclude" runat="server" IncludeType="Header" /><!-- bla2 -->
 <% } %>
</div>

呈现的 html 看起来像:

<!-- bla1 -->
""
expected content from strangeBehavingControl
<!-- bla2 -->

奇怪行为控制的 .ascx 非常简单:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="strangeBehavingControl.ascx.cs" Inherits="layouts.strangeBehavingControl" %>

任何地方都没有多余的空格,已经检查了很多次。后面的代码也很简单:

public partial class strangeBehavingControl: System.Web.UI.UserControl
    {

    protected override void Render(HtmlTextWriter writer)
        {
            var filePath = GetFilePath();
            if (!string.IsNullOrWhiteSpace(filePath) && File.Exists(Server.MapPath(filePath)))
                Response.WriteFile(filePath);
        }  
    }

所以我在想渲染的包含文件中的奇怪“”,但我手动检查了它们,它们以预期的字符开头。知道如何将这些字符插入那里吗?

4

2 回答 2

3

您为控件生成的标记不正确。您的渲染方法应该使用HtmlTextWriter给它的实例,而不是Response.

它也看起来像一个相当奇怪的设置,因为您将内容写为UserControl,这意味着它将在页面中呈现。假设您总是输出有效的 HTML 或纯文本是否正确?

我建议你改变你的Render方法如下:

protected override void Render(HtmlTextWriter writer)
{
    var filePath = GetFilePath();
    if (!string.IsNullOrWhiteSpace(filePath) && File.Exists(Server.MapPath(filePath)))
        using (var sr = new StreamReader(filePath))
            writer.Write(sr.ReadToEnd());
}  
于 2012-05-18T00:36:47.220 回答
2

有时控制文件有另一个字符集。确认您的文件在开头没有多余的字符,如果有,请删除它们。您可能必须使用允许您执行此操作的智能文本编辑器。

我有同样的额外空间问题,但我的控件没有实现Render()方法。

于 2012-12-19T07:58:41.447 回答