- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你好,
我有一个自定义控件,我需要从类中实例化它并将其添加到页面中。我的类(class)有一个函数,我将 Page
传递给它,这样我就可以访问页面上的控件。我正在使用这种方法来添加标准的 ASP 控件,并且一切都按预期工作。我的问题是自定义控件的类型是已知定义的?
我读了here将 .cs 从控件移动到 App_Code 文件夹,但是当我这样做时,它不会编译,因为它看不到 ascx 中的控件有效。例如,我得到 CS0103: The name 'litTest' does not exist in the current context
。因为它们是分部类,所以我在 App_Code 文件夹中创建了一个新的空分部类,并单独保留控件的 .cs 文件。
好吧,它是这样编译的,但是当我将控件添加到 Page.controls 集合时,我没有在页面上看到任何它应该在的地方。例如,我将 TEST
添加到 ascx 文件的底部,但我在页面上看不到它。此外,该控件具有我需要设置的变量,在使用空分部类时我无权访问这些变量。
我知道我正在尝试使用标准控件进行操作,但为什么我似乎无法使用自定义控件进行操作?
我在 App_Code 文件夹中的部分类:
public partial class CustomControlClass : System.Web.UI.UserControl
{
}
我的用户控件部分类:
public partial class CustomControlClass : System.Web.UI.UserControl
{
private int _myValue= -1;
public int myValue
{
get { return _myValue; }
set { _myValue= value; }
}
protected void Page_Init(object sender, EventArgs e)
{
litTest.Text = "TEST";
}
}
我的用户控件ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="CustomControlClass.ascx.cs" Inherits="CustomControlClass" %>
<asp:Literal ID="litTest" runat="server"></asp:Literal>
TEST
我的 App_Code 类:
public class MyClass
{
public static void doWork(Page Ctrl)
{
CustomControlClass c = new CustomControlClass();
//c.myValue = 1; // Wont compile with this line
Ctrl.Controls.Add(c);
Literal l = new Literal();
l.Text = "HELLO";
Ctrl.Controls.Add(l);
}
}
页面输出根本没有 TEST 这个词。 HELLO 这个词显示得很好。我尝试从页面 Load
、Init
和 PreInit
回调中调用 MyClass.doWork()
,所有导致该死的事情。
更新:
正如 Minh Nguyen 所建议的那样,我可以使用 Ctrl.LoadControl("~/Controls/CustomControlClass.ascx");
来加载控件,但我不能将其转换为它自己的类型我必须将它分配为控件类型:
Control c= Ctrl.LoadControl("~/Controls/CustomControlClass.ascx");
这样做可以让我将控件添加到页面并使其按预期工作。缺点是我无法访问任何控件属性。为了解决这个问题,我正在这样做:
c.GetType().GetProperty("myValue").SetValue(c, 1, null);
这行得通,但我不确定它的使用成本。我希望我可以直接转换控制,但我在尝试时遇到错误。
我暂时不回答这个问题,看看是否还有其他选择。
最佳答案
使用
CustomControlClass c = (CustomControlClass)Ctrl.LoadControl("~/VirtualPathToASCX/CustomControlClass.ascx");
代替
CustomControlClass c = new CustomControlClass();
更新:修复转换错误
//LoadControl
ASP.customcontrolclass_ascx c = (ASP.customcontrolclass_ascx)this.LoadControl("~/Controls/CustomControlClass.ascx");
//set myValue
c.myValue = 3;
你在 VS 自动完成列表中看不到 ASP.customcontrolclass_ascx 类型,但它编译没有错误。
关于c# - ASP.Net c# - 如何从 App_Code 类中实例化 WebUserControl 的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4940446/
在 Asp.net 网页应用程序上工作。我有一个用户 WebUserControl,它包含两个文本框和几个 javascript 语法,我的控件将一个文本框信息复制到另一个文本框中。当我多次使用我的用
我创建了一个 Web 用户控件,其中包含一些 ASP.NET 和第三方控件。 我已经在页面标记中测试了我的控件,效果很好。 现在,我想在同一页面中呈现此控件,但不在页面第一次呈现时呈现。事实上,我
我正在构建一个网站,我需要根据用户请求调用 WebUserControls (.ascx),我该如何实现?这可能吗? 例子: protected void userclick_click(object
鉴于此网络用户控件: Hello World! alert("Hello!"); 这在我的主页上: 如何将 webusercontrol 中的 Javasc
我在将 ASPX 页面转换为 Controller (ASCX) 时遇到问题。我的 JavaScript 没有在隐藏的 div 中找到文本框,也没有触发 onclick 事件。但是它在 ASPX 页面
我在使用具有 asyncfileupload 控件的 Webusercontrol 时遇到问题。我的 websusercontrol 正在加载到由 updatepanel 包装的占位符控件中。由于 a
我有一个 Web 用户控件,它提供一些潜在的密集型数据计算,我希望将其输出缓存,以便每个页面 View 都不会重新计算数据。它驻留在非常频繁查看的页面上,因此让它正常工作非常重要! 对于上下文,它用于
我有一个带有公共(public) int 属性 SelectedCatID 的 webusercontrol。我在其他页面和其他控件中使用此控件,如下所示: " /> 如何根据SelectedCatI
我正在尝试使用 IoC 加载网络用户控件。我正在使用 unity,我按照书中的示例进行设置。到目前为止一切顺利,但是当我注入(inject)看起来像各个控件本身的界面时,我遇到了问题。我正在尝试使用
我正在使用 asp.net3.5 C# 和 Jquery 我创建了一个webUserControltimer.ascx,我有一个页面showTime.aspx我已经将timer.ascx添加到Show
你好, 我有一个自定义控件,我需要从类中实例化它并将其添加到页面中。我的类(class)有一个函数,我将 Page 传递给它,这样我就可以访问页面上的控件。我正在使用这种方法来添加标准的 ASP 控件
我有一个从 System.Web.UI.UserControl 派生的非常简单的 Web UserControl。在设计时,用户控件在具有所有 CSS 样式的 VS2008 Pane 中看起来很完美。
我非常熟悉为类库创建 NuGet 包。昨天我测试了对 ASP.NET Web 应用程序做同样的事情,令我惊讶的是它有效(有点 - 有一些怪癖)。 我的 Web 应用程序很简单,只包含一个 .ascx
我是一名优秀的程序员,十分优秀!