3 Stimmen

seltsame ""-Anführungszeichen in html vor asp.net-Steuerung

Ich sehe ein wirklich seltsames Problem mit Asp.net-Rendering. Ich habe genau dies in den relevanten Teil der .aspx (nur ersetzt Namen der Pfade und Steuerelemente):

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

das gerenderte HTML sieht so aus:

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

das .ascx für strangeBehavingControl ist wirklich einfach:

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

keine zusätzlichen Leerzeichen irgendwo, bereits viele Male überprüft. der Code dahinter ist auch wirklich einfach:

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);
        }  
    }

so dachte ich, dass die seltsame "" wo innerhalb der gerenderten enthaltenen Dateien, aber ich überprüfte sie manuell und sie beginnen mit den erwarteten Zeichen. jede Idee, wie diese Zeichen dort eingefügt werden kann?

3voto

Mike Guthrie Punkte 3979

Sie erzeugen das Markup für Ihr Steuerelement falsch. Ihre Render-Methode sollte die HtmlTextWriter Instanz, die ihm gegeben wurde, und no mit einer beliebigen direkten Ausgabemethode auf Response .

Es sieht auch nach einem ziemlich seltsamen Aufbau aus, da Sie den Inhalt als UserControl d.h. sie wird innerhalb einer Seite gerendert. Ist es richtig anzunehmen, dass Sie immer entweder gültigen HTML-Code oder reinen Text ausgeben?

Ich würde vorschlagen, Sie ändern Ihre Render Methode wie folgt:

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());
}

2voto

Vlad Manea Punkte 36

Manchmal hat die Steuerdatei einen anderen Zeichensatz. Stellen Sie sicher, dass Ihre Datei keine zusätzlichen Zeichen am Anfang enthält, und entfernen Sie diese gegebenenfalls. Möglicherweise müssen Sie einen intelligenten Texteditor verwenden, mit dem Sie dies tun können.

Ich hatte das gleiche Problem mit dem zusätzlichen Speicherplatz, aber meine Kontrolle implementierte keine Render() Methode.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X