在另一个Web表单div中加载Web表单

时间:2012-02-10 17:28:14

标签: c# asp.net html

您好我如何在一个Web表单div /

中加载Web表单

所以我在主页面内打开了网页表单'帐户'。

在我的帐户网络表单上,当用户点击它以在帐户页面中加载另一个网络表单时,我想要的菜单。

我正在使用ASP.NET C#。

抱歉我的英语不好。

谢谢

1 个答案:

答案 0 :(得分:2)

如果要在服务器端执行此操作,可以通过将usercontrol的实例加载到表单与实际页面来完成。 Click here to see an MSDN example并确保使用更新面板来管理回发。

如果你想做这个客户端,你可以通过ajax并调用ashx(处理程序文件) 管理这个客户端:

在您的aspx文件中添加以下内容:

标题

中的

    <script type="text/javascript">
        $(function () {
            $("#panel").hide();
        });
        $(document).ready(function () {
            $(".slide").click(function () {
                $("#panel").show("slow", false);

                jQuery.ajax({
                    type: "POST",
                    url: "controlloader.ashx",
                    dataType: "html",
                    success: function (response) {
                        jQuery('#loadcontrol1').append(response);
                    },
                    error: function () {
                        jQuery('#loadcontrol1').append('error');
                    }
                });

            });

        });
</script>

然后在体内

<body>
    <form id="form1" runat="server" >
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div>
        <div id="panel" >
        <p>stuff here</p>
        </div>
        <p><%= DateTime.Now %></p>
        <div id="div1" class="slide">
            <p class="btn-slide">Expand Panel</p>
        </div>
        <br />
        <asp:Button Text="Click me" ID="clickButton" runat="server" />

        <div id="loadcontrol1" />

    </div>
    </form>
</body>

然后在你的ashx文件中

public class controlloader : IHttpHandler
    {
        //If annonymous id is turned on IRequireSessionState Interface may be needed to write session variabled such as user auth.
        // Generic handlers by default implementIReadOnlySessionState
        public void ProcessRequest (HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            context.Response.Write(RenderPartialToString("~/Control1.ascx")); ;
        }

        private string RenderPartialToString(string controlname)
        {
            Page page = new Page();
            Control control = page.LoadControl(controlname);
            page.Controls.Add(control);

            StringWriter writer = new StringWriter();
            HttpContext.Current.Server.Execute(page, writer, false);

            return writer.ToString();
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }

您还需要创建用户控制文件,但我会将该代码留给您。 这个例子中发生了一些事情。该按钮用于证明后置以确保不重新加载控件。我还添加了一个你不需要的动画,但这是我从前一段时间开始的一个旧的概念验证片,所以你可以忽略那些代码。

我知道你提到了母版页的用户,所以你很可能想把javascript分解成一个js文件,然后一定要用脚本管理器加载它:

<asp:ScriptManager ID="ScriptManager1" runat="server">
        <Scripts>
            <asp:ScriptReference Path="~/js/jquery-1.7.js" />
            <asp:ScriptReference Path="~/js/yourcontrolloader.cs" />
</scripts>
</asp:ScriptManager>

这在使用母版页时是必需的,否则由于服务器端渲染,您的引用将丢失并且脚本永远不会被调用。您还可以在实际页面与母版页中使用部分引用,但这取决于您。

祝你好运