我在使用时遇到问题LoadControl( type, Params ).让我解释...
我有一个超级简单的用户控件(ascx)
<%@ Control Language="C#" AutoEventWireup="True" Inherits="ErrorDisplay" Codebehind="ErrorDisplay.ascx.cs" EnableViewState="false" %>
<asp:Label runat="server" ID="lblTitle" />
<asp:Label runat="server" ID="lblDescription" />
Run Code Online (Sandbox Code Playgroud)
代码(c#)背后:
public partial class ErrorDisplay : System.Web.UI.UserControl
{
private Message _ErrorMessage;
public ErrorDisplay()
{
}
public ErrorDisplay(Message ErrorMessage)
{
_ErrorMessage = ErrorMessage;
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
if (_ErrorMessage != null)
{
lblTitle.Text = _ErrorMessage.Message;
lblDescription.Text = _ErrorMessage.Description;
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我的Web应用程序的其他地方,我使用以下代码将usercontrol的实例添加到页面:
divValidationIssues.Controls.Add(LoadControl(typeof(ErrorDisplay), new object[] { MessageDetails }));
Run Code Online (Sandbox Code Playgroud)
我正在使用LoadControl的重载版本,因为我想将Message参数传递给构造函数.这一切看起来都可行.
但是,当在OnPreRender()ErrorDisplay用户控件上触发时,lblTitle和lblDescription变量都是 …
大家好!我正在通过Web方法加载UserControl,并使用LoadControl功能:
// create page, stringWriter
Page _page = new Page();
StringWriter _writer = new StringWriter();
// get popup control
Controls_Popup_ForumThreadForm _control = _page.LoadControl("~/Controls/Popup_ForumThreadForm.ascx") as Controls_Popup_ForumThreadForm;
Run Code Online (Sandbox Code Playgroud)
然后我做以下事情:
// add control to page
_page.Controls.Add(_control);
HttpContext.Current.Server.Execute(_page, _writer, false);
Run Code Online (Sandbox Code Playgroud)
问题是控件的Page_Load事件根本不会触发.如果我添加另一个函数,并在将控件添加到页面的Controls集合之前调用它,该函数将触发,但Page_Load事件不会触发.
任何想法,伙计?谢谢大家!
我有一个应该使用缓存的用户控件VaryByControl.该.ascx文件如下所示:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestControl.ascx.cs" Inherits="mynamespace.TestControl" %>
<%@ OutputCache Duration="10" Shared="true" VaryByControl="Test" %>
<p id="SomeText" runat="server">Nothing</p>
Run Code Online (Sandbox Code Playgroud)
该TestControl代码隐藏文件类有一个int Test {...}属性和Page_Load()填充事件处理SomeText同款:
SomeText.InnerText = string.Format(@"Test={0} at {1}", Test, DateTime.Now)
Run Code Online (Sandbox Code Playgroud)
我有一个.aspx看起来像这样的文件:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestPage.aspx.cs" Inherits="mynamespace.TestPage" %>
<%@ Register TagPrefix="xxx" TagName="TestControl" Src="Controls\TestControl.ascx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<xxx:TestControl Test="6" runat="server" />
<xxx:TestControl Test="7" runat="server" />
<hr /> …Run Code Online (Sandbox Code Playgroud)