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 -->

おかしなBehavingControlの.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 に答える