Вывод содержимого за пределы ContentPlace — ASP.NET

#asp.net #code-behind

#asp.net #скрытый код

Вопрос:

Я использую VS 2008, Windows Xp.

Моя страница:

 <asp:Content runat="server" ContentPlaceHolderID="ContentPlaceHolder1">
<%=  WriteReport()%> 
<%= "Hellooo" %> 
</asp:Content>
  

Скрытый код:

 public string WriteReport()
{

  StringWriter swriter = new StringWriter();
  using (HtmlTextWriter hwriter = new HtmlTextWriter(swriter))
  {
      //Write a table...
  }

  return swriter.ToString();
}
  

Забавно, что «Heloo» попадает в contentPlace, но возвращаемый метод этого не делает. Это место находится под div ContentPlace (заканчивается в нижнем колонтитуле div).

Спасибо за вашу помощь.

РЕДАКТИРОВАТЬ———————-
Временное решение

 <%= WriteReport()%>
<asp:Table runat="server" ID="testeme">
 </asp:Table>
  

Я добавил фиктивную таблицу (id = testeme), она ничего не делает и в ней ничего нет. Но сейчас это работает, какого черта. Работает только тогда, когда метод указан ниже.

ПРАВКА2———————

Я попытался угадать соответствующие части из главной страницы и разместил их здесь.

 <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="MasterPage.master.cs" Inherits="MyAppV2.Views.MasterPage" %>


    <div id="general">


    <form id="form1" runat="server" enctype="multipart/form-data">
    <div id="main">

                <div>

                    <asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
                    </asp:contentplaceholder>

                </div>


            </div>

    </form>

</div>  

    <div id="footer">

            <p>MYFOOTER</p>

    </div>
  

Первая строка представления с использованием главной страницы:

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="MP5._Default" MasterPageFile="~/MasterPage.Master" %>
  

Ответ №1:

Вместо того, чтобы вводить код на свою страницу с помощью <%= ... %> , вы можете использовать <asp:literal> тег:

 <asp:Content runat="server" ContentPlaceHolderID="ContentPlaceHolder1">
    <asp:Literal id="MyReport" runat="server" />
</asp:Content>
  

Затем вы можете записать в него из своего исходного кода, используя свойство text. Вы можете вызвать метод WriteReport() из Page_Load.

 public void WriteReport()
{

  StringWriter swriter = new StringWriter();
  using (HtmlTextWriter hwriter = new HtmlTextWriter(swriter))
  {
      //Write a table...
  }

  MyReport.Text = swriter.ToString();
}
  

Это должно решить любые странности, связанные с тем, где код заканчивается на странице.

Комментарии:

1. Это сработало, но оно по-прежнему отображается под ContentPlace, в нижнем колонтитуле div. Кроме того, если я помещу фиктивную таблицу, она будет работать нормально (таблица должна быть под ней).

2. Для устранения неполадок при рендеринге / размещении на главной странице было бы неплохо просмотреть разметку главной страницы…