【问题标题】:Get ClientID of a parameter on an ASP site获取 ASP 站点上参数的 ClientID
【发布时间】:2010-07-20 00:18:10
【问题描述】:

我有一个方法的参数,它应该是一个字符串,我无法想出如何将 作为变量这样的东西。由于它是一个变量,我不能将它用引号括起来,因为它会按字面意思使用,当我像变量一样使用参数时(正如你应该做的那样),我收到一个 ASP 错误,说它在上下文中不存在(从字面上看)。

有什么线索吗?

谢谢大家

代码示例

function next(currentControl, maxLength, nextControl) { 
   if (document.getElementById( currentControl<%=.ClientID %>).value.length >= maxLength) {
         document.getElementById( nextControl<%=.ClientID %>).focus(); 
   } 
   return false; 
} 

调用示例

wValCode.Attributes.Add("onkeyup","next('wValCode','3','wValThree')");

我可能知道添加属性的原始方式,但它是如何向我解释的。我在飞行中学习了 ASP,所以不要对我太苛刻 ;)

静态 HTML

<input name="ctl00$ContentPlaceHolder2$wValThree" type="text" id="ctl00_ContentPlaceHolder2_wValThree" style="width:33px;">

这是我可以在静态 html 中找到的唯一相关参考。它会被添加到一个 ASP 复杂的 js 文件中吗?

【问题讨论】:

  • 这是我最近的尝试(愚蠢但不得不试一试)
  • 感谢 JohnFx 比我做得更正确;)
  • 传入函数的currentControl值从何而来,又包含什么?
  • 这个方法怎么称呼?你能给我们一个示例方法调用吗? (你可能不需要在这里使用 ASP 标签..)
  • 嗯,我确实需要访问所有内容的最终输入,因此 ASP 控件似乎是可行的方法。我将在顶部发布如何添加属性。

标签: c# javascript asp.net html


【解决方案1】:

鉴于您要从后面的代码中绑定关键事件,您只需在进行绑定时引用客户端 ID:

wValCode.Attributes.Add("onkeyup","next('" + wValCode.ClientID + "', '3', '" + wValThree.ClientID + "')");

然后,您已经将客户端 ID 作为参数传递给 javascript 函数

function next(currentControl, maxLength, nextControl) { 
   if (document.getElementById(currentControl).value.length >= maxLength) {
         document.getElementById(nextControl).focus(); 
   } 
   return false; 
}

更好的选择是使用this关键字将调用对象的引用作为第一个参数传递:

//code behind
wValCode.Attributes.Add("onkeyup","next(this, '3', '" + wValThree.ClientID + "')");

//javascript function
function next(currentControl, maxLength, nextControl) { 
   if (currentControl.value.length >= maxLength) {
         document.getElementById(nextControl).focus(); 
   } 
   return false; 
}

【讨论】:

  • 这个对我来说最有意义。但它还没有运行......我在想另一个错误可能吗?我在函数开始的那一行在 firebug 上放了一个断点,什么也没有,看起来好像没有被调用或其他什么
  • 调试的下一步是在浏览器中查看源代码,并确保该属性在控件上正确呈现。为我们发布为控件呈现的示例..
  • 了解活动是否已附加的最佳方法是什么?在静态 html 中找到元素的标签?
  • 我明白了!!我忘记了 C# 后端,我必须在 page 指令中添加 autoeventwireup true。 :) 感谢您的帮助 - 如果没有您的回答,仍然是不正确的!
【解决方案2】:

尝试将点移到 ASP.NET 标记之外:

currentControl.<%= ClientID %>

【讨论】:

  • 好吧,现在我没有收到编译错误,但我也不相信它找到了控件,因为它仍然不像我开始使用母版页之前那样工作
  • 我怀疑这会给你页面的 ClientID,而不是你正在寻找的控件..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-15
  • 2017-06-16
  • 1970-01-01
  • 2014-02-02
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多