【问题标题】:asp:multiview control - can we show all the views on one tab instead of different tabsasp:multiview control - 我们可以在一个选项卡上显示所有视图而不是不同的选项卡吗
【发布时间】:2011-12-25 12:43:57
【问题描述】:

我在我的代码中使用了多视图控件,我在我的页面上显示了 5 个视图。目前,我正在尝试使用 CSS 实现“打印”功能”,我想要将所有 5 个视图一起显示,以便于打印。

那么,是否可以一次在多视图中显示所有视图。像显示所有视图或显示所有视图。

如果我可以一次显示所有视图,我可以解决我的打印功能。请帮帮我。

【问题讨论】:

    标签: asp.net css printing controls multiview


    【解决方案1】:

    我认为 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多