【发布时间】:2010-08-30 05:49:17
【问题描述】:
我正在关注这个例子:http://msdn.microsoft.com/en-us/library/ms178210.aspx
我可以让它只使用一个页面和一个后面的代码,但是当我添加一个母版页时,示例无法正常工作。在我的母版页中,我有一个头部内容部分和一个正文内容部分。没什么花哨的。
如何使用母版页进行客户端回调?
【问题讨论】:
标签: asp.net
我正在关注这个例子:http://msdn.microsoft.com/en-us/library/ms178210.aspx
我可以让它只使用一个页面和一个后面的代码,但是当我添加一个母版页时,示例无法正常工作。在我的母版页中,我有一个头部内容部分和一个正文内容部分。没什么花哨的。
如何使用母版页进行客户端回调?
【问题讨论】:
标签: asp.net
一种更具可扩展性的方法是使用以下语法(也将 ResultsSpan 替换为 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 进程解析页面并将 指令替换为客户端上控件的正确名称。
如果您有嵌套控件,此方法也可以使用。在您的示例中,如果您有一个嵌套在另一个面板中的控件,则呈现的 id 可能类似于 MASTERPAGEPREFIX_CONTAINERCONTOLNAME_ListBox1,然后您的解决方法将失败。
作为一般原则,在您的标记中“硬编码”客户端 ID 通常被认为是一个坏主意 - 让 ASP.NET 进程为您处理它
【讨论】:
我让它工作了。
请务必修改此代码以说明 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;
}
【讨论】: