ClientId与localhost和Web服务器不同

时间:2011-01-28 05:50:36

标签: asp.net jquery

我正面临一个新问题。

我正在使用jQuery来填充国家/地区下拉列表的状态下拉列表,而jquery的代码是在js文件上,所以我绑定了静态客户端ID,如ct100_ddlCountry,这在localhost上正常工作但是当我将此网站托管到Web服务器它不起作用,因为在服务器上生成的客户端是_ct100_ddlCountry。

如果有人对此有所了解,请告诉我一些事情。我是这类问题的新手。

感谢所有人。

3 个答案:

答案 0 :(得分:1)

在js脚本包含或html源代码中硬编码控件ID通常不是好习惯。

尝试使用以下内容:

JS

function DoChange(controlid) {
    $("#"+controlid);
} 

HTML

<select onchange='DoChange("<%= ddlCountry.ClientID %>");' />

这意味着如果你在控制树中移动你的控件,那么你不会破坏你的代码,它应该在你的localhost和IIS上工作

<强>更新

或者像这样

JS

function DoChange(control) {
    $(control);
} 

HTML

<select onchange="DoChange(this);" />

答案 1 :(得分:1)

如果你无法升级到.NET 4.0以获得干净的id,我写了一个小的lib并将它推到CodePlex上,将控件序列化为客户端上的JSON数组。

http://awesomeclientid.codeplex.com/

http://www.philliphaydon.com/2010/12/i-love-clean-client-ids-especially-with-net-2-0/

它序列化控件并输出一些JavaScript,如:

<script type=”text/javascript”>
//<![CDATA[
var controls = {
"txtUserName": "ctl00_ContentPlaceHolder1_txtUserName",
"txtEmail": "ctl00_ContentPlaceHolder1_txtEmail",
"btnSubmit": "ctl00_ContentPlaceHolder1_btnSubmit"
};
//]]>
</script>

然后允许您访问以下控件:

<script type=”text/javascript”>
//<![CDATA[
var element = document.getElementById(controls.btnSubmit);
//]]>
</script>

无需写意大利面条代码:)

编辑:或者,您可以使用jQuery选择器执行以下操作:

var control = $('[id*=txtEmail]');

答案 2 :(得分:0)

如果是ASP.Net 4.0,那么您可以使用ClientIDMode="Static"来确保只有您提供的ID才能在最终标记中出现。

或者您可以使用$('id$=country')之类的内容。 $用于匹配Id的结尾,但我确信这不是最佳的。