如何强制服务器端 (C#.NET) 操作在客户端操作之前发生按钮单击以避免弹出窗口被阻止?

How can I force the server side (C#.NET) actions to occur before the client side actions on a button click to avoid a popup to be blocked?

提问人:Chelynn 提问时间:9/22/2018 更新时间:9/22/2018 访问量:156

问:

我正在尝试创建三个按钮。ButtonAdd 添加一个新的介绍屏幕,并在新窗口中打开一个编辑器以对所述屏幕进行更改。仅当用户尚未添加介绍屏幕时,Button1 才可见。ButtonRemove 删除介绍屏幕。ButtonEdit 将打开编辑器以对介绍屏幕进行更改。ButtonRemove 和 ButtonEdit 仅在用户已添加简介屏幕时才可见。我遇到的问题是 ButtonAdd。

ButtonAdd 需要进行服务器调用才能实际创建对象并将其保存在数据库中:

serverClickFunction(object sender, EventArgs e)
{
    activity.addIntroScreen();
}

ButtonAdd 还需要进行客户端调用才能打开编辑器。打开编辑器的 URL 需要知道有关新对象的某些信息(screenid 和 contentid):

function OpenEditIntro() {
    var tviewer = window.open('../library/edit.aspx?&ScreenID=<%# 
        this.introScreenID %>&contentID=<%# this.introContentID%>')
    tviewer.focus();
}

因此,本质上需要首先进行服务器调用。否则,客户端调用不知道该对 screenID 或 contentID 使用什么。所以我尝试从服务器或代码隐藏调用客户端函数。这样:

serverClickFunction(object sender, EventArgs e)
    {
        activity.addIntroScreen();
        ScriptManager.RegisterStartupScript(this, this.GetType(), 
           "openEdit", "OpenEditIntro();", true);
    }

这非常有效。除了弹出窗口阻止器不喜欢这个。因此,他们不允许弹出编辑窗口。有什么方法可以绕过这个弹出窗口被阻止的方法吗?还是有另一种我没有考虑的方法来解决这个问题?

C# asp.net 服务器端 客户端 弹出窗口阻止程序

评论

0赞 mjwills 9/22/2018
更改,使其不需要介绍屏幕 ID。如果它在没有介绍屏幕 ID 的情况下调用,那么它可以动态创建一个。这避免了弹出窗口阻止程序试图阻止的“获取 ID,现在打开新窗口”问题。edit.aspx
0赞 mjwills 9/22/2018
或者,添加新的终结点 - 。在新窗口中加载 - 一旦它有了 ID,它就会有效地调用并重定向到。bobbobactivity.addIntroScreen();edit.aspx
0赞 Chelynn 9/25/2018
@mjwills 谢谢!这真的很有帮助。拥有新的端点是必不可少的,因为我不想对edit.aspx进行更改。

答: 暂无答案