【问题标题】:Problems accessing ASP.NET Controls from JavaScript从 JavaScript 访问 ASP.NET 控件的问题
【发布时间】:2012-02-04 06:35:38
【问题描述】:

抱歉,这个基本的愚蠢问题。但我真的不知道如何解决这个问题。我有 ASP 控件(一个 TextBox 和一个 DropDownList)。现在我需要访问TextBox 的value 属性以及DropDownList 的SelectedIndex 属性。这应该很简单:

对于TextBox:

document.getElementById("<%= myControl.ClientID >").value

对于DropDownList:

document.getElementById("<%= myControl.ClientID %>").selectedindex

但在 Visual Studio 2008 中,当我编写这些代码时,它不起作用。我找不到相应控件的任何 value 或 selectedindex 属性。我没有得到这个,因为在大多数论坛和教程中,他们以我提到的简单方式提出了建议。

HTML 代码:

<div> <asp:TextBox ID="myText" runat="server" /> <asp:DropDownList ID="myList" runat="server" /> </div> 

还有其他方法吗,或者我只是在这里遗漏了什么?

【问题讨论】:

  • 它不是关于错误消息,只是我在 标签中编写代码时没有从列表中得到任何建议,因为列表中没有这样的属性...@ jadarnel27
  • 如果您没有正确使用正确的.vsdoc,您将永远无法在非编译语言上从 VisualStudio 获得完全智能感知。再说一次,我已经写了你需要如何从你的下拉列表中获取值,在谷歌上的一个小搜索就会告诉你。

标签: javascript asp.net


【解决方案1】:

首先,jQuery对你编写javascript有很大帮助,你应该使用这个路径。

要回答您的问题,您需要使用MyControlId.ClientID 而不仅仅是MyControlId

例如:

var t = document.getElementById('<%= myTextBoxID.ClientID %>').value;
alert(t);  // textbox value

var d = document.getElementById('<%= myDropDownID.ClientID %>'),
    dSelected = d.options[d.selectedIndex].value;
alert(dSelected); // dropdown value

使用 jQuery,这将是:

var t = $('#<%= myTextBoxID.ClientID %>').val(),   // for your textbox
    d = $('#<%= myDropDownID.ClientID %>').val();  // for your selectbox 
alert(t ' --> ' + d);

接缝,从cmets说你还是没有运气,那么问题肯定出在控件或者名字本身,试试这个来调试问题:

假设你有:

<asp:TextBox runat="server" id="MyTextBox" Text="Hello" />

在该行的正下方写下:

<h2><%= MyTextBox.ClientID %></h2>

并打开浏览器的检查器(Firebug 或 IE 开发工具)并运行 javascript 以查看是否获得 Hello 字符串,如下所示:

注意:我使用了MyTextBox,请将其更改为您在&lt;h2&gt;标签中获得的名称

【讨论】:

  • 他将.ClientID 编辑到问题中,所以他正在使用它。另外...绝对不需要 jQuery 来获取控件的 ID。好像有点过分=)
  • @jadarnel27 你永远不会“只是”获得控件的价值,你会开始做更多的事情......如果你从一开始就采用 jQuery 方式,一切都会更好结束。而且,您的答案中确实有纯 javascript 和 jQuery,只需选择您喜欢的,我会始终坚持使用 jQuery。
  • @jadarnel27 那么他做错了什么,或者不是&lt;input type="text"&gt; 他试图访问或使用错误的ID,我的代码在任何asp:TextBox 和asp:DropDown 控件中都有效,经过测试!
  • 调试@jchoudhury 很容易。做一个简单的&lt;h2&gt;&lt;%= MyTextControlId.ClientID %&gt;&lt;/h2&gt; 看看写了什么,然后打开检查器并用它来编写代码并检索你想要的。
  • 底线,你最好写一个纯javascript和jQuery的混合,以获得高效的代码。获取值不需要构建 jQuery 对象并调用 .val() 如果它可以在一行 js 中完成。
【解决方案2】:

我个人会使用 jQuery 而不是标准 JavaScript,然后查看 this question 以了解如何使用它找到您的元素。

编辑:如果您之前没有使用过 jQuery,请确保将代码包装在其就绪块中,否则它可能找不到您的元素:

$(document).ready(function() {
  // work with your element ID here
});

【讨论】:

    【解决方案3】:

    尝试使用单个标点符号。

    document.getElementById('<%= myTextBox.ClientID %>').value 
    

    有几个答案推荐jQuery,但我认为你应该只在需要时使用它。如果您只是从元素中获取值,则不需要在您的网站中引入新库。如果您打算使用相当多的 Javascript、动画等。那么 jQuery 会很有意义。

    【讨论】:

    • 谢谢。但是,我尝试了单引号和双引号,但仍然无法正常工作。
    • 语法是正确的(我在这个答案中使用了它:stackoverflow.com/questions/8736123/…) - 您的 Javascript 代码中可能有其他问题阻止执行。如果你用alert 替换上面的链接,alert 会被调用吗?另外,你能发布更多你的标记/JS吗?
    • @keyboardP。问题是,如果你的 javascript 在单独的 .js 文件中,&lt;%...%&gt; 不会被解析并且一切都会中断,但我同意你的看法。
    • @DidierG。 - 这是一个很好的观点。 OP,您是在处理来自外部文件的 Javascript 吗?
    • 我没有任何单独的 .js 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 2013-01-19
    相关资源
    最近更新 更多