惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Security Latest
Security Latest
Recorded Future
Recorded Future
人人都是产品经理
人人都是产品经理
S
SegmentFault 最新的问题
Hacker News - Newest:
Hacker News - Newest: "LLM"
C
CXSECURITY Database RSS Feed - CXSecurity.com
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
P
Privacy & Cybersecurity Law Blog
WordPress大学
WordPress大学
Know Your Adversary
Know Your Adversary
Spread Privacy
Spread Privacy
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
量子位
L
LINUX DO - 热门话题
L
Lohrmann on Cybersecurity
博客园 - Franky
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tor Project blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
雷峰网
雷峰网
阮一峰的网络日志
阮一峰的网络日志
V
Visual Studio Blog
T
Threatpost
T
Tenable Blog
有赞技术团队
有赞技术团队
大猫的无限游戏
大猫的无限游戏
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
C
Cisco Blogs
H
Heimdal Security Blog
Attack and Defense Labs
Attack and Defense Labs
A
About on SuperTechFans
Last Week in AI
Last Week in AI
N
News and Events Feed by Topic
T
Threat Research - Cisco Blogs
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
I
Intezer
V
V2EX
Cyberwarzone
Cyberwarzone
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
B
Blog RSS Feed
V
Vulnerabilities – Threatpost
N
Netflix TechBlog - Medium
T
The Blog of Author Tim Ferriss
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
U
Unit 42
PCI Perspectives
PCI Perspectives
P
Privacy International News Feed
D
Docker

博客园 - Insus.NET

User Profile Service 服务未能登录 Visual Studio2026创建Vue项目 安装与配置node.js HTTP Error 403.14 - Forbidden VisualStudio2026回滚上一版本 消息认证码(加强) 网站无法使用插值字符串语法 HMAC(Hash-based Message Authentication Code)认证示例 浏览器自动发送域凭据 企业内小网站兼用Windows验证登录 访问用户控件的函数 onblur事件改为监听处理 内容有无变化OnBlur即时更新引起的问题与解决 混合式提高用户编辑与操作效率 光标离开文框后即刻更新 WebForm实现Web API JavaScript对GridView删除行后并重新给其数据绑定 把CS值传给JS使用 v2 确认信息confirm由C#后端移至javascript前端 无法发布网站Web Site JavaScript判断字符是否为decimal 点击单元格弹出窗口处理数据返回父页 GridView数据控件中实现单选功能 文本框输入完后直接按回车提交数据 GridView对行进行全选或单选 TextBox文本框允许用户输入正或负小数 用户单击文本并复制至剪帖板 Vue3格式化日期时间与插值 SQL Server中验证大小字母和数字 MS SQL Server 数据加密与解密实例 相册由原来Lightbox升级至Vue2瀑布流 从Visual Studio 2022升级至Visual Studio 2026 报表应用图表charts显示数据 钉钉(DingTalk)免登录 Upgrade Outlook Connector 程序中真实应用SignalR Web API路径与IIS站点应用程序名或虚拟目录 在您可以登录前,此副本的 Windows 必须被 Microsoft 激活。您想现在激活它吗 电脑系统由Win10降级Win7折腾还是折腾 System.ComponentModel.Win32Exception: Access is denied
将警报消息改为吐司消息
Insus.NET · 2026-05-06 · via 博客园 - Insus.NET

alert警报信息,用户需要去点击确定,警报提示框才关闭。
而confirm提示框。某些操作警报给用户确认,是否继续操作。必须让用户确认或取消。

写些示例来说明,
2026-05-06_10-32-17

2026-05-06_10-32-17

 <table style="width: 65%;">
     <tr>
         <td>HTML Button</td>
         <td>HTML Button</td>
         <td>Server Button</td>
         <td>Server Button</td>
     </tr>
     <tr>
         <td>
             <input id="ButtonHtmlAlertButton" type="button" value="alert button" onclick="alertbutton_click();" /></td>
         <td>
             <input id="ButtonHtmlConfirmButton" type="button" value="confirm button" onclick="confirmbutton_click();" /></td>
         <td>
             <asp:Button ID="ButtonServerAlertButton" runat="server" Text="Alert Button" OnClick="ButtonServerAlertButton_Click" /></td>
         <td>
             <asp:Button ID="ButtonServerConfirmButton" runat="server" Text="Confirm Button" OnClick="ButtonServerConfirmButton_Click" /></td>
     </tr>
 </table>

View Code

2026-05-06_10-35-34

<script type="text/javascript">
    function alertbutton_click() {
        alert("hi 点击了html alert按钮。");
    }

    function confirmbutton_click() {
        if (confirm("确认操作继续,确认后状态无法退回。") == true)
            return true;
        else
            return false;
    }
</script>

View Code

Server Button cs代码,
2026-05-06_10-40-15

 protected void Page_Load(object sender, EventArgs e)
 {
     if (!IsPostBack)
     {
         Data_Binding();
     }
     this.ButtonServerConfirmButton.Attributes["OnClick"] = "return confirm('确认操作继续,确认后状态无法退回。')";
 }

 protected void ButtonServerAlertButton_Click(object sender, EventArgs e)
 {
     string message = "Hi 点击Alert服务按钮。";
     AlertMessage(message);
 }

 protected void ButtonServerConfirmButton_Click(object sender, EventArgs e)
 {
     
 }

 private void AlertMessage(string message)
 {
     System.Text.StringBuilder sb = new System.Text.StringBuilder();
     sb.Append("<script type = 'text/javascript'>");
     sb.Append("window.onload=function(){");
     sb.Append("alert('");
     sb.Append(message);
     sb.Append("')};");
     sb.Append("</script>");
     ScriptManager.RegisterStartupScript(this, this.GetType(), Guid.NewGuid().ToString(), sb.ToString(), false);
 }

View Code

33

Confirm Button上面有提及,保留其必须用户点击。

为提示效率,减少用户点击鼠标操作频率。我们把这些Alert信息改为吐司信息。
先修改html alert button功能,
2026-05-06_11-34-40

 function alertbutton_click() {
     /* alert("hi 点击了html alert按钮。");*/

     showMessage("hi 点击了html alert按钮。", false);
 }

 //function showMessage(msg, isError) {
 //    let toast = document.getElementById('dynamicToast');
 //    if (!toast) {
 //        toast = document.createElement('div');
 //        toast.id = 'dynamicToast';
 //        toast.style.cssText = `
 //        position: fixed; top: 20px; left: 50%; transform: translateX(-50%);
 //        background: #333; color: #fff; padding: 8px 16px; border-radius: 4px;
 //        z-index: 10000; font-size: 14px; opacity: 0; transition: opacity 0.2s;
 //        pointer-events: none; font-family: sans-serif;
 //    `;
 //        document.body.appendChild(toast);
 //    }
 //    toast.textContent = msg;
 //    toast.style.backgroundColor = isError ? '#d9534f' : '#5cb85c';
 //    toast.style.opacity = '1';
 //    setTimeout(() => { toast.style.opacity = '0'; }, 2000);
 //}

View Code


有在js代码中,添加一个方法,showMessage(msg,IsError)。
然后在alertbutton_click事件中,把
alert("hi 点击了html alert按钮。");
修改为
showMessage("hi 点击了html alert按钮。", false);

这样子,警报信息将在页面顶部呈现2000毫秒自动消失。
显示时长,可自行修改setTimeout值。

如果你项目中,多处页面共用这个功能,可以把showMessage写成一个js库,页面需要用到的地方,引用即可。
如下面javascript代码,另存成一个js文件,放在你的项目中。
2026-05-06_11-20-56

(function () {
    let toast = null;

    function ensureToast() {
        if (!toast) {
            toast = document.createElement('div');
            toast.id = 'dynamicToast';
            toast.style.cssText = `
                position: fixed; top: 20px; left: 50%; transform: translateX(-50%);
                background: #333; color: #fff; padding: 8px 16px; border-radius: 4px;
                z-index: 10000; font-size: 14px; opacity: 0; transition: opacity 0.2s;
                pointer-events: none; font-family: sans-serif;
            `;
            document.body.appendChild(toast);
        }
    }

    window.showMessage = function (msg, isError) {
        ensureToast();
        toast.textContent = msg;
        toast.style.backgroundColor = isError ? '#d9534c' : '#5cb85c';
        toast.style.opacity = '1';
        clearTimeout(window.toastTimeout);
        window.toastTimeout = setTimeout(() => {
            toast.style.opacity = '0';
        }, 2000);
    };
})();

View Code

参考下面代码,修改程序,
2026-05-06_11-45-22

接下来,我们修改Server Alert Button功能,希望在C#端应用到javascript的showMessage()方法。

写成一个静态方法,
2026-05-06_16-29-08

namespace Insus.NET
{
    public static class ToastHelper
    {       
        public static void ShowMessage(Page page, string message, bool isError = false, Control updatePanel = null)
        {
            //  string script = $"showMessage('{EscapeJsString(message)}', {isError.ToString().ToLower()});";   //C# 6.0 or above.
            string script = string.Format("showMessage('{0}', {1});", EscapeJsString(message), isError.ToString().ToLower());

            // 尝试获取 ScriptManager
            ScriptManager sm = ScriptManager.GetCurrent(page);

            if (sm != null && updatePanel != null)
            {
                // 有 ScriptManager 且指定了 UpdatePanel,注册到该 UpdatePanel 范围内
                ScriptManager.RegisterStartupScript(updatePanel, updatePanel.GetType(), Guid.NewGuid().ToString(), script, true);
            }
            else if (sm != null)  
            {
                // 有 ScriptManager 但未指定 UpdatePanel,注册到页面(适用于普通异步回发)
                ScriptManager.RegisterStartupScript(page, page.GetType(), Guid.NewGuid().ToString(), script, true);
            }
            else
            {
                // 没有 ScriptManager,使用传统方式(适用于普通回发)
                page.ClientScript.RegisterStartupScript(page.GetType(), Guid.NewGuid().ToString(), script, true);
            }
        }

        private static string EscapeJsString(string s)
        {
            if (string.IsNullOrEmpty(s)) return string.Empty;
            return System.Web.HttpUtility.JavaScriptStringEncode(s);
        }
    }
}

View Code

 修改代码,
2026-05-06_17-17-11

 最后看看alert按钮呈现效果(留意绿色警报信息),
55