asp.net – 从用户控件内添加页面控件集合
我有一个asp.net usercontrol,它代表一个“弹出”对话框.基本上,它是jQuery UI对话框的包装器,可以将其子类化以轻松创建对话框.
作为此控件的一部分,我需要将一个div注入到控件所使用的页面中,或者在窗体的顶部或底部,以便在弹出实例化时,将其父级更改为此div.这允许“嵌套”弹出窗口,而子弹出窗口中没有子弹出窗口. 麻烦的是,我找不到一种安全的方法将这个div注入页面.用户控件没有preinit事件,所以我不能在那里执行,并且在Init,Load或PreRender中调用Page.Form.Controls.Add(…)会导致标准异常“控件集合无法修改在DataBind,Init,Load,PreRender或Unload阶段.“ 我以为我找到了一个解决方案…… ScriptManager.RegisterClientScriptBlock(Page,Me.GetType,UniqueID + "_Dialog_Div",containerDiv,False) …它似乎正常工作,但最近一位同事试图在对话框中放置一个UpdatePanel,现在她收到错误“注册类型为’ASP.controls_order_viewzips_ascx’的脚本标签’和键’ctl00 $ContentBody $OViewZips_Dialog_Div’无效脚本标签之外的字符:.只能注册格式正确的脚本标签.“ 你应该如何从用户控件内部向页面控件集合中添加控件? 解决方法
我不确定为什么你真的需要将这个div添加到页面的表单中,但这应该有效:
Public Class WebUserControl1 Inherits System.Web.UI.UserControl Private Sub UC_Init(ByVal sender As Object,ByVal e As System.EventArgs) Handles Me.Init AddHandler Me.Page.Init,AddressOf Me.Page_Init End Sub Private Sub Page_Init(ByVal sender As Object,ByVal e As EventArgs) Dim dialogDiv As New Panel dialogDiv.ID = "DialogDiv" If Not Page.Form.Controls.Contains(dialogDiv) Then Page.Form.Controls.AddAt(0,dialogDiv) End If End Sub End Class
是否要将文字添加到主文件中的HeadContent-ContentPlaceHolder控件或页面的标题(html头元素)?但是,我在这里展示了两者. 这是UserControl的代码隐藏: public partial class UC_AddToMaster : System.Web.UI.UserControl { private void Page_Init(object sender,System.EventArgs e) { this.Page.Init += UC_AddToMaster_Init; } private void UC_AddToMaster_Init(object sender,EventArgs e) { Literal literal = new Literal{ Text = "Hi World!" }; // if you want to add it to the header of the page: if (!Page.Header.Controls.Contains(literal)) { Page.Header.Controls.AddAt(0,literal); } // if you want to add it to the master's HeadContent ContentPlaceHolder control: var siteMaster = Page.Master as SiteMaster; if (siteMaster != null) { if (!siteMaster.Head.Controls.Contains(literal)) { siteMaster.Head.Controls.AddAt(0,literal); } } } } 对于上面提到的HeadContent方法,我在master中提供了以下属性: // in the master public ContentPlaceHolder Head { get { return this.HeadContent; } } 因此,我需要在UserControl中将页面的主文件转换为它的实际类型(SiteMaster here).否则我无法访问此属性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – ASP和’不起作用
- asp.net-core – ASP.NET Core 2迁移错误.找不到匹配命令“
- asp.net-mvc – 为什么我的会话变量在构建Controller时不可
- asp.net – 显示为普通html的.cshtml文件
- ASP.NET RadioButton混淆名称(组名)
- asp.net-mvc – 子文件夹中的控制器
- asp.net-mvc – 如何在ASP.NET MVC中构建没有ViewContext的
- asp.net-mvc – 使用MVC Framework RC1更新断开连接的LINQ对
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automap
- asp.net-mvc – 如何在向Db插入数据时自动生成asp.net mvc4
- asp.net-mvc – Linq离开外连接不起作用
- asp.net-mvc – MVC 4:多个控制器动作参数
- asp.net-mvc – 汇编绑定重定向不工作
- asp.net-mvc – 如何在ASP.NET MVC控制器工厂中处
- asp.net-mvc-3 – MVC3 Webgrid的服务器端分页
- ASP.NET WSAT(网站管理工具)和自定义成员资格提供
- 澄清ASP.NET生命周期事件的序列
- asp.net-mvc – 在ASP.NET MVC中使用HTML表单?
- ASP.NET MVC.检查用户是否已获得JavaScript授权
- asp.net-mvc – DAL中的app.config和WebApplicat