asp: управление множественным видом - можем ли мы показать все представления на одной вкладке вместо разных вкладок - PullRequest
3 голосов
/ 09 ноября 2011

Я использовал элемент управления Multiview в своем коде, где я отображаю 5 просмотров на моей странице. В настоящее время я пытаюсь реализовать функциональность «Печать» с помощью CSS, и я хочу, чтобы все 5 видов отображались вместе, чтобы их было легко печатать.

Итак, можно ли одновременно отобразить все виды в многовиде. что-то вроде отображения всех просмотров или отображения всех просмотров.

Я могу обойти свои функции печати, если смогу отобразить все виды одновременно. Пожалуйста, помогите мне.

1 Ответ

2 голосов
/ 15 ноября 2011

Я считаю, что элемент управления MultiView не поддерживает эту функцию по умолчанию.Что вы можете сделать, это реализовать собственный элемент управления MultiView, унаследованный от существующего, и добавить к нему желаемую функциональность:

[DefaultProperty("Text")]
[ToolboxData("<{0}:MyMultiView runat=server></{0}:MyMultiView>")]
public class MyMultiView : MultiView
{
    [Category("Behavoir")]
    [DefaultValue(false)]
    public bool RenderAllAtOnce
    {
        get
        {
            return (bool)(ViewState["RenderAllAtOnce"]?? false);
        }

        set
        {
            ViewState["RenderAllAtOnce"] = value;
        }
    }

    protected override void Render(HtmlTextWriter writer)
    {
        if (!RenderAllAtOnce)
        {
            base.Render(writer);
        }
        else
        {
            foreach (View view in this.Views)
            {
                this.SetActiveView(view);
                view.RenderControl(writer);
            }
        }
    }
}

Затем вы можете использовать этот элемент управления вместо элемента по умолчанию и установить для свойства RenderAllAtOnce значение true для некоторыхНажатие кнопки «Печать».

Также вы не можете участвовать в создании нового элемента управления, просто отобразить все представления в строку и передать их какому-нибудь литералу на странице:

.print
{
     display: none;
}

@media print
{
     .noPrint
     {
          display: none;
     }

     .print
     {
          display: block !important;
     }
}

<div class="noPrint">
     <asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="0" >
          <asp:View ID="View1" runat="server">
               AAAA
          </asp:View>
          <asp:View ID="View2" runat="server">
               BBBB
          </asp:View>
          <asp:View ID="View3" runat="server">
               CCCC
          </asp:View>
     </asp:MultiView>
     <asp:Button ID="btnPrint" runat="server" Text="Print" OnClick="btnPrint_Click" />
</div>
<div class="print">
     <asp:Literal runat="server" ID="Literal1" Mode="PassThrough" />
</div>

protected void btnPrint_Click(object sender, EventArgs e)
{
    var sb = new StringBuilder();
    using (var writer = new StringWriter(sb))
    using (var htmlWriter = new HtmlTextWriter(writer))
    {
        foreach (View view in MultiView1.Views)
        {
            view.RenderControl(htmlWriter);
        }
    }

    Literal1.Text = sb.ToString();
    ClientScript.RegisterStartupScript(this.GetType(), "print", "window.print();", true);
}
...