C# $.find控件的id未定义

C# $.find控件的id未定义,c#,javascript,jquery,asp.net,ajax,C#,Javascript,Jquery,Asp.net,Ajax,我正在尝试动态生成一个控件,然后更改另一个控件。例如,我有一个按钮和一个标签,我想使用AJAX/JS/etc更改标签的文本,而不需要post/get查询。所以我写了一个这样的代码: foreach (var pair in FailedMonitorings) { var server = (ServerEnum)pair.Key; var tabPanel = new TabPanel { HeaderText =

我正在尝试动态生成一个控件,然后更改另一个控件。例如,我有一个按钮和一个标签,我想使用AJAX/JS/etc更改标签的文本,而不需要post/get查询。所以我写了一个这样的代码:

        foreach (var pair in FailedMonitorings)
        {
            var server = (ServerEnum)pair.Key;
            var tabPanel = new TabPanel { HeaderText = server.GetDescription() };
            var updatePanel = new UpdatePanel();
            var upChilds = updatePanel.ContentTemplateContainer.Controls;
            var label = new Label { Text = "Hello from UP-" + tabPanel.HeaderText, ID = "lbl" + tabPanel.HeaderText};
            upChilds.Add(label);
            const string command = @"var ctrl = $.find(""{0}""); alert(ctrl.id); return false;";
            var button = new Button {Text = "Button"};
            upChilds.Add(button);

            tabPanel.Controls.Add(updatePanel);


            tbcErrors.Tabs.Add(tabPanel);
            button.OnClientClick = string.Format(command, label.ClientID);
        }
因此,在此处生成html:

首先,我只想创建一个id为control的messagebox,但即使是这个简单的代码也不起作用。问题是:为什么?如何解决呢


添加:ctrl不为空

当命令是

const string command = @"var ctrl = $.find(""{0}""); alert(((ctrl != null).toString() + ' ') + ctrl.id); return false;";
结果是
真的未定义

我认为应该是这样
const string command=@“var ctrl=$('#{0}')[0];ctrl.innerText='Updated!';返回false;”

为什么我说这是在jquery中,要选择一个id为的元素,您将使用与css选择器相同的约定,这意味着您需要在id前面加一个“#”前缀,因此
$(“#elementid”)
将选择类似
的DOM元素

    foreach (var pair in FailedMonitorings)
    {
        var server = (ServerEnum)pair.Key;
        var tabPanel = new TabPanel { HeaderText = server.GetDescription() };
        var updatePanel = new UpdatePanel();
        var upChilds = updatePanel.ContentTemplateContainer.Controls;
        var label = new Label { Text = "Hello from UP-" + tabPanel.HeaderText, ID = "lbl" + tabPanel.HeaderText};
        upChilds.Add(label);
        const string command = @"updateText('{0}')";
        var button = new Button {Text = "Button"};
        upChilds.Add(button);

        tabPanel.Controls.Add(updatePanel);


        tbcErrors.Tabs.Add(tabPanel);
        button.OnClientClick = string.Format(command, label.ClientID);
    }
然后是html

<script type="text/javascript">
function updateText(id){
    var ctrl = $('#' + id);
    ctrl.text('Updated text');
    return false;
}
</script>
这意味着ctrl将不是null而是一个空数组,因为没有像
ctrl$Label1
这样的dom元素,而且由于数组没有id属性,因此它将是未定义的。你要找的是客户面前的一个“#”。第二个原因是,即使您有一个有效的选择器,它仍然会返回undefined。返回的JQuery对象没有id属性,因此您仍然会看到未定义的。因此,最后要获得id和正确的选择器

conststring命令=@“var ctrl=$('{0}')[0];警报(ctrl.id);返回false;

或者,如果您需要设置文本,它将如下所示


conststring命令=@“var ctrl=$('#{0}')[0];ctrl.innerText='已更新!;返回false

嗯,您至少有一个问题:
@“var ctrl=$.find(“{0}”);警报(ctrl.id);返回false;“您希望“0”是什么?您需要格式化该字符串:如果您说:ctrl不为空。。。请告诉我们ctrl实际上是什么。我怀疑ctrl是空的array@WolleVanillebärLutz,你说得对,键入if“array of native”
@“var ctrl=$.find({0}”);alert(ctrl.id);return false;“如果复制粘贴代码,它什么也不做,如果只添加$(…)结果和我之前的结果一样。+1用于只注入函数调用而不是整个函数!正确答案是
var ctrl=$('#{0}')[0]
(tnx用于谷歌浏览器控制台)。和innerText而不是val属性。最后一个命令是
“var ctrl=$('#{0}')[0];ctrl.innerText='Updated!';return false;”
,因此请编辑您的答案,我将其标记为.done。如果val()不起作用,可以使用text()来代替,但我认为现在已经足够了
<button onclick="var ctrl = $.find("Ctrl$Label1");alert(((ctrl != null).toString() + ' ') + ctrl.id); return false;" />