我正在关注此示例:http://msdn.microsoft.com/en-us/library/ms178210.aspx
我可以让它只使用一个页面和一个代码,但是当我添加一个母版页时,这些示例无法正常工作。在我的母版页中,我有一个头部内容部分和一个正文内容部分。这没什么特别的。
如何使用母版页进行客户端回调?
答案 0 :(得分:1)
更具伸缩性的方法是使用以下语法(也将ResultSpan替换为aspx面板)...
function LookUpStock()
{
var lb = document.getElementById('<%=ListBox1.ClientID%>');
var product = lb.options[lb.selectedIndex].text;
CallServer(product, "");
}
function ReceiveServerData(rValue)
{
document.getElementById('<%=ResultsSpan.ClientID%>').innerHTML = rValue;
}
这样,如果MasterPage的名称(或实际页面)发生更改,代码仍然有效。
基本上,ASP.NET进程会解析页面并替换&lt;%=%&gt;指令在客户端上具有正确的控件名称。
如果您有嵌套控件,这种方法也可以使用。在您的示例中,如果您将控件嵌套在另一个面板中,则呈现的ID可能看起来像MASTERPAGEPREFIX_CONTAINERCONTOLNAME_ListBox1,然后您的解决方法将失败。
作为一般原则,通常认为在标记中“硬编码”客户端ID是个坏主意 - 让ASP.NET进程为您处理
答案 1 :(得分:-1)
我得到了它的工作。
请务必修改此代码以考虑MasterPage contentId前缀:
function LookUpStock()
{
var lb = document.getElementById("MASTERPAGEPREFIX_" + "ListBox1");
var product = lb.options[lb.selectedIndex].text;
CallServer(product, "");
}
function ReceiveServerData(rValue)
{
document.getElementById("MASTERPAGEPREFIX_" + "ResultsSpan").innerHTML = rValue;
}