我可以在代码后面注册一个 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
并不是真正需要的。
首先,我不知道问题 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
并不是真正需要的。