我可以在代码后面注册一个 AjaxControlToolkit 吗?

Can i register an AjaxControlToolkit at code behind?

首先,我不知道问题 header 是否与我的问题相同,但是是的,我自己也不知道如何解释它们。对此感到抱歉。

我使用 AjaxToolKit 在设计视图中创建了一个模态(有点像表单)控件弹出窗口,它工作得很漂亮。但是后来我尝试在代码隐藏中创建控件,但它并没有真正起作用。我想创建一个弹出控件,该控件与从我拥有的数据库返回的行数一起创建。这是代码。

HTML

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<%@ Register Src="~/HeaderUnlogged.ascx" TagPrefix="uc1" TagName="HeaderUnlogged" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<%@ Register Src="~/Footer.ascx" TagPrefix="uc1" TagName="Footer" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>


<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Amusing</title>
    <script src="js/jquery-1.11.2.min.js"></script>    
    <script src="bootstrap-3.3.2-dist/js/bootstrap.min.js"></script>
    <link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body runat="server">
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div class="containerAll">
        <div class="header">
            <div class="headerLink">
                <asp:HyperLink ID="HyperLink1" runat="server" class="link1" href="#">Tabs</asp:HyperLink>/
                <asp:HyperLink ID="HyperLink2" runat="server" class="link2" href="#">Music</asp:HyperLink>/
                <asp:HyperLink ID="HyperLink3" runat="server" class="link3" href="#">Videos</asp:HyperLink>/
            </div>
            <div class="headerLogo">
                <div class="banner">
                    <div class="bannerLogo">
                        <h1>Amusing Guitar Place</h1>
                    </div>
                    <div class="headerLoginRegister">
                        <% if (Session["user"] == null)
                           { %>
                        <div class="loginRegister">
                            <div class="userID">
                                <span>User ID</span>
                                <asp:TextBox ID="userID" runat="server" class="textBoxLogin"></asp:TextBox>
                            </div>
                            <div class="passwordUser">
                                <span>Password</span>
                                <asp:TextBox ID="passW" runat="server" class="textBoxLogin" TextMode="Password"></asp:TextBox>
                            </div>
                        </div>
                        <div class="loginButtons">
                            <asp:Button ID="Button1" class="loginButton" runat="server" Text="Login"/>
                            <asp:Button ID="Button2" class="loginButton" runat="server" Text="Register"/>
                            <!--<a href="register.aspx" class="a registerButton"> Register </a>-->
                        </div>
                        <%}
                           else{
                               if (Session["user"] != null)
                                   Response.Write("Welcome " + Session["user"] + "!");
                               else
                                   Response.Write("Welcome Guest!");
                           } %>
                    </div>
                </div>
            </div>
            <div class="headerSearch">
                <div class="bottomItem">
                    <asp:DropDownList ID="DropDownList1" runat="server" class="dropDown">
                        <asp:ListItem Selected="True">Tabs</asp:ListItem>
                        <asp:ListItem>Videos</asp:ListItem>
                        <asp:ListItem>Audios</asp:ListItem>
                    </asp:DropDownList>
                    <asp:TextBox ID="TextBox3" runat="server" class="searchTextBox"></asp:TextBox>
                    <asp:Button ID="Button3" runat="server" Text="Search" class="loginButton"/>
                </div>
            </div>
        </div>
        <div class="mainContent">
            <div class="firstContent">
                <div class="headline"><h2>News</h2></div>
                <div class="content">
                    <div class="contentMusic">
                        <div class="music">
                            <div class="innerHeadLine">Musics</div>
                            <div class="innerContent">
                                <% displayAudioDiv();%>
                            </div>
                        </div>
                    </div>
                    <div class="contentVideos">
                        <div class="videos">
                            <div class="innerHeadLine">Videos</div>
                            <div class="innerContent">
                                <div class="innerItems">
                                    <% displayVideoDiv();%>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="secondContent">
                <div class="headline"><h2>Media</h2></div>
                <div class="content">
                    <div class="contentTabs">
                        <div class="tabs">
                            <div class="innerHeadLine">Tabs News</div>
                            <div class="innerContent">
                                insert butoh here
                            </div>
                        </div>
                    </div>
                    <div class="contentMusic">
                        <div class="music">
                            <div class="innerHeadLine">ini untuk tabs</div>
                            <div class="innerContent">
                                insert jahanam here
                            </div>
                        </div>
                    </div>
                    <div class="contentVideos">
                        <div class="videos">
                            <div class="innerHeadLine">ini untuk tabs</div>
                            <div class="innerContent">
                               insert bongok here
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div class="footer">
            <uc1:Footer runat="server" ID="Footer" />
        </div>
        <!-- ModalPopupExtender -->
        <cc1:ModalPopupExtender ID="mp1" runat="server" PopupControlID="Panel1" TargetControlID="Button2"
            CancelControlID="btnClose" BackgroundCssClass="modalBackgroundRegistration">
        </cc1:ModalPopupExtender>
        <asp:Panel ID="Panel1" runat="server" class="modalPopupRegistration">
            <div class="modHeaderRegistration">Registration<br /></div>
            <div class="modBodyRegistration">
                <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label><asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                <asp:Label ID="Label3" runat="server" Text="Label"></asp:Label><asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
                <asp:Label ID="Label4" runat="server" Text="Label"></asp:Label>
            </div>

            <asp:Button ID="btnClose" runat="server" Text="Close" />
        </asp:Panel>
        <!-- ModalPopupExtender -->
    </div>
    </form>
</body>
</html>

HTML 代码隐藏

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

public partial class _Default : System.Web.UI.Page
{
    string cs = ConfigurationManager.ConnectionStrings["testing1"].ConnectionString;
    protected void Page_Load(object sender, EventArgs e)
    {
    }

    public void  displayVideoDiv()
    {
        using (SqlConnection con = new SqlConnection(cs))
        {
            SqlCommand cmd = new SqlCommand("select * from media where fileType = 'Video'", con);

            con.Open();
            SqlDataReader drVideo = cmd.ExecuteReader();

            while (drVideo.Read())
            {
                Response.Write(
                    "<div class='listContent'>" +
                        "<div class='videoBanner'></div>" +
                        "<div class=listItems style=background-image:url('userData/Videos/" + drVideo["id"].ToString() + "/" + Uri.EscapeDataString(drVideo["imageName"].ToString()) + "');>" +
                            "<a href='#' class='a' name='h' id='video"+Uri.EscapeDataString(drVideo["fileName"].ToString()) + "'>" +
                                    drVideo["fileName"] +
                            "</a>" +
                        "</div>" +
                    "</div>");

                Response.Write(
                "<cc1:ModalPopupExtender ID='mp" + Uri.EscapeDataString(drVideo["fileName"].ToString()) + "' runat='server' PopupControlID='Panel"+Uri.EscapeDataString(drVideo["fileName"].ToString()) + "' TargetControlID='video" + Uri.EscapeDataString(drVideo["fileName"].ToString()) + "'" +
                    "CancelControlID='btnClose' BackgroundCssClass='modalBackground'>"+
                "</cc1:ModalPopupExtender>"+
                "<asp:Panel ID='Panel"+Uri.EscapeDataString(drVideo["fileName"].ToString()) + "' runat='server' class='modalPopup'>"+
                    "<div class='modHeader'>Registration<br /></div>"+
                    "<div class='modBody'>"+
                    "</div>"+
                    "<asp:Button ID='btnClose" + Uri.EscapeDataString(drVideo["fileName"].ToString()) + "' runat='server' Text='Close' />" +
                "</asp:Panel>"
                                );
            }
        }
    }
    public void displayAudioDiv()
    {
        using (SqlConnection con = new SqlConnection(cs))
        {
            SqlCommand cdm = new SqlCommand("select * from media where fileType = 'Audio'", con);
            con.Open();
            SqlDataReader drAudio = cdm.ExecuteReader();
            while (drAudio.Read())
            {
                Response.Write(
                    "<div class='listContent'>" +
                        "<div class='audioBanner'></div>" +
                        "<div class='listItemsAudio'>" +
                            "<a href='#' class='a'>" + 
                                    drAudio["fileName"] +
                            "</a>" +
                        "</div>" +
                    "</div>");
            }
        }
    }

    public string videoModal()
    {
        var file = Request.QueryString["file"];

        using (SqlConnection con = new SqlConnection(cs))
        {
            SqlCommand cmd = new SqlCommand("select * from media where fileName='" + file + "'", con);
            con.Open();
            SqlDataReader video = cmd.ExecuteReader();
            video.Read();
            return "userData/Videos/" + video["id"].ToString() + video["fileName"].ToString();
        }   
    }
}

The part where it calls the controls from codebehind to design view is displayVideoDiv() at the second Response.Write.

    public void  displayVideoDiv()
    {
        using (SqlConnection con = new SqlConnection(cs))
        {
            SqlCommand cmd = new SqlCommand("select * from media where fileType = 'Video'", con);

            con.Open();
            SqlDataReader drVideo = cmd.ExecuteReader();

            while (drVideo.Read())
            {
                Response.Write(
                    "<div class='listContent'>" +
                        "<div class='videoBanner'></div>" +
                        "<div class=listItems style=background-image:url('userData/Videos/" + drVideo["id"].ToString() + "/" + Uri.EscapeDataString(drVideo["imageName"].ToString()) + "');>" +
                            "<a href='#' class='a' name='h' id='video"+Uri.EscapeDataString(drVideo["fileName"].ToString()) + "'>" +
                                    drVideo["fileName"] +
                            "</a>" +
                        "</div>" +
                    "</div>");

                Response.Write(
                "<cc1:ModalPopupExtender ID='mp" + Uri.EscapeDataString(drVideo["fileName"].ToString()) + "' runat='server' PopupControlID='Panel"+Uri.EscapeDataString(drVideo["fileName"].ToString()) + "' TargetControlID='video" + Uri.EscapeDataString(drVideo["fileName"].ToString()) + "'" +
                    "CancelControlID='btnClose' BackgroundCssClass='modalBackground'>"+
                "</cc1:ModalPopupExtender>"+
                "<asp:Panel ID='Panel"+Uri.EscapeDataString(drVideo["fileName"].ToString()) + "' runat='server' class='modalPopup'>"+
                    "<div class='modHeader'>Registration<br /></div>"+
                    "<div class='modBody'>"+
                    "</div>"+
                    "<asp:Button ID='btnClose" + Uri.EscapeDataString(drVideo["fileName"].ToString()) + "' runat='server' Text='Close' />" +
                "</asp:Panel>"
                                );
            }
        }
    }

控件出来了,但问题是,它不是弹出窗口。它只是停留在我创建一组 div 的第一个 response.write 下面。我希望单击第一 response.write 组 div 中的链接,然后弹出一个窗口。我应该在代码隐藏处注册 ajax 吗?如果可以,我该怎么做?

如果我的问题不相关或不可能,我很抱歉。我对造成的任何喧嚣感到遗憾。任何建议都会受到欢迎。

在我看来,这种在运行时创建服务器控件的方式非常糟糕。

要解决您的问题,您可以在 Panel 中使用 UpdatePanel 作为 ModalPopup。我提供了一个简单的例子,你可以很容易地适应你的需要。

ASPX:

<ajaxToolkit:ToolkitScriptManager ID="sm" runat="server" />
<asp:Panel ID="pnlModal" runat="server">
    <asp:UpdatePanel ID="up" runat="server">
        <ContentTemplate>
            <asp:Panel ID="pnlPH" runat="server">
            </asp:Panel>
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Panel>
<asp:Button ID="btn" runat="server" Text="Modal" />
<ajaxToolkit:ModalPopupExtender ID="mpe" runat="server" TargetControlID="btn" PopupControlID="pnlModal" ></ajaxToolkit:ModalPopupExtender>

代码隐藏:

protected void Page_Load(object sender, EventArgs e)
{
    TextBox txt = new TextBox();
    txt.ID = "txt1";

    pnlPH.Controls.Add(txt);
}

你最好按照上面的方法在运行时创建服务器控件。

如果您在第一次创建后不需要更改 ModalPopup 内容,那么 UpdatePanel 并不是真正需要的。