【发布时间】:2011-02-27 17:17:19
【问题描述】:
我正在现有的 ASP.NET 用户控件中构建一些自定义 javascript 功能。用户控件需要了解它所嵌套的控件的属性。因此,我最终选择使用 expando 属性,而不是像这样的全局 javascript 变量:
Page.ClientScript.RegisterExpandoAttribute(Me.ClientID, "validatorsenabled", Me.ValidatorsEnabled)
然而,虽然expando 正确地输出到客户端,但用户控件本身在HTML 中并没有对应的元素。因此,由 ASP.NET 自动生成的以下 JavaScript 会出现“对象为空”错误:
var ctl00_MainContentHolder_Payment_CreditCardInput1 = document.all ? document.all["ctl00_MainContentHolder_Payment_CreditCardInput1"] : document.getElementById("ctl00_MainContentHolder_Payment_CreditCardInput1");
ctl00_MainContentHolder_Payment_CreditCardInput1.validatorsenabled = "False";
我做了一些调查,发现 this page 表明实现 IWebPart 接口可能会做到这一点,但我尝试了没有运气。
有没有办法让用户控件像服务器控件一样输出标签?或者是将整个东西转换为服务器控件的唯一选择(在这种情况下,这违背了网站设计的原则)?
如果有人有任何其他想法,我愿意接受其他关于在用户控件中声明共享 JavaScript 属性的建议。
【问题讨论】:
-
不确定我是否理解正确,但您认为隐藏字段对您的情况有用吗?
-
有趣的想法。隐藏字段可以包含在我的用户控件中,但是仍然存在包含它的控件如何知道隐藏字段的命名方式的问题。请记住,一个页面上可以有多个用户控件实例。
标签: javascript asp.net user-controls expando