我想使用 __DoPostBack 调用服务器端方法并生成 HTML,但我不希望我的页面中有一个隐藏的 ASP runat 服务器控件,它可以通过其名称而不是触发它的控件的名称来调用服务器端方法? ?
5 回答
每当我看到这个问题时,我都会有点紧张,因为提问者不太了解导致回帖的所有含义,所以我想简要介绍一下:
- 浏览器中的当前 DOM 实例被销毁。就浏览器而言,您正在提交当前页面并请求一个全新的页面。
- 不仅有问题的服务器端方法会运行,还会运行整个页面生命周期的其余部分,包括任何所需的数据绑定或页面加载/初始化代码。它将全部从头开始重新渲染。
这真的是你想要发生的事情吗?
研究 ASP.Net 处理 AJAX 功能或另一个术语的回调的各种方式,因为这似乎是您正在尝试做的事情。该方法必须存在于页面中,或者如果它存在于控件中,则该控件必须存在一个 ID,以识别单击了哪个按钮,因为可以在页面上多次重复相同的控件。
如果我单击 runatserver 按钮也会发生同样的情况,所有页面都将再次呈现。
我使用控件名称作为参数调用了 __DoPostBack javascript 函数,如果我单击按钮或链接按钮,它的工作方式相同。
正如乔尔所提到的,你可能有一些意想不到的行为会覆盖这样的回传。如果您完全了解正在发生的事情,那就没有错。
我认为您可能真正想要的是一个WebMethod
. 这将使您的页面保持完整,但允许您调用特定的服务器端方法:
public partial class _Default : Page
{
[WebMethod]
public static string GetDate()
{
return DateTime.Now.ToString();
}
}
创建一个 ID 为“DummyButton”的虚拟按钮,style="display:none"
并使用您想要的代码添加一个单击事件处理程序。__doPostBack('<%= DummyButton.UniqueID %>');
从 javascript 脚本元素调用。
你需要用css隐藏假人;如果您设置Visisble="false"
,__doPostback
将不会执行常规回发,因为它不会使用按钮作为回发启动器元素。在这种情况下,服务器仍然会受到攻击,但您可能会遇到奇怪的问题。