4

我有一个asp.net 主页,其中加载了一个ascx 控件。

在主页上,我有一个 textarea 元素声明为

<asp:TextBox ID="description" runat="server" Rows="8" Columns="35" TextMode="MultiLine" class="smth" title="A Title"></asp:TextBox>

呈现为

<textarea name="description" rows="8" cols="35" id="description" class="smth" title="A Title"></textarea>

在 ascx 控件上,我声明了一个类似的文本框

<textarea id="descriptionMap" rows="5" cols="25" class="smth" title="A Title"></textarea>

呈现相同的效果。

在主页上,我可以访问第一个文本框(包含在主页上)的内容

$('#' + <%=description.ClientID %>).val()

但我无法访问 ascx 控件中包含的文本框的内容

$('#descriptionMap').val()

但是,如果我将 ascx 文件中的文本框声明为

<textarea id="descriptionMap">some static content</textbox>

我可以访问它,但如果我自己在文本框中写一些东西,什么也不会发生。这让我发疯了。有什么建议么?我使用的是 IE 8,这可能是问题吗?

编辑。一个简化的例子。这是 ascx 控件的呈现方式:

<textarea id="descriptionMap" rows="5" cols="25" class="smth" title="A Title"></textarea>
<input type="submit" id="sendMap" value="Send" onclick="sendTest();" />
<script type="text/javascript">
function sendTest() {
    alert(document.getElementById('descriptionMap').value);
}</script>

警报对话框显示为空。问题一定与以某种方式使用 ascx 控件有关。

4

2 回答 2

1

有点不清楚您是使用服务器控件还是直接在 ascx 页面中<asp:TextBox runat="server"...创建 html 元素。<textarea id="descriptionMap"...

如果您使用第一个选项(在 ascx 中创建服务器端控件),则元素的最终 ID 将基于用户控件本身的 ID。

例如,如果您在主页中添加了用户控件

<uc:MyTag runat="server" Id="MyControl01" />

然后用户控件内的 textarea 的最终 ID 将是MyControl01_descriptionMap,您将需要使用它来访问它$('#MyControl01_descriptionMap')(如果您在 .NET framework 4 及更高版本中使用默认的 ClientIDMode)。

但是如果你直接在你的 ascx 文件中创建一个 html 元素,那么你需要确保你的 id 是 unquie 并且你可以使用相同的 id 来访问控件。

于 2013-03-07T19:46:18.723 回答
0

利用

$('#' + '<%= description.ClientID %>').val()

或者

$('#<%= description.ClientID %>').val()
于 2013-03-07T17:02:47.560 回答