c# 如何在“处理”按钮事件时更改按钮图标/格式?

斯基尔佐尔

HtmlButton在后面的代码中创建了几个 server ,如下所示:

HtmlButton button = new HtmlButton();
button.ID = idString + "_btnStart";
button.InnerHtml = "<i class=\"fa fa-play btn-green\"/></i>";
button.Attributes.Add("type", "button");
button.Attributes.Add("runat", "server");
button.Attributes.Add("class", "btn btn-link btn-xs");
button.Attributes.Add("title", "Start");
button.ServerClick += new EventHandler(BtnStart_Click);
ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(button);

每个按钮都有自己的UpdatePanel

UpdatePanel uPanel = new UpdatePanel()
{
    ID = idString + "_uPanel",
    UpdateMode = UpdatePanelUpdateMode.Conditional
};
uPanel.ContentTemplateContainer.Controls.Add(button);

现在,单击按钮时,我想先更改InnerHtmlPage_Load事件:

private void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        Control control = null;
        string controlName = Request.Params.Get("__EVENTTARGET");
        if (controlName != null && controlName != string.Empty)
        {
            control = FindControl(controlName);
            if(control != null)
            {
                HtmlButton button = (HtmlButton)control;
                UpdatePanel uPanel = (UpdatePanel)button.Parent.Parent;
                string id = button.ID.Split('_')[1];
                switch (id)
                {
                    case "btnStop":
                        button.InnerHtml = "<i class=\"fa fa-spinner fa-pulse btn-red\"/></i>";
                        break;
                    case "btnStart":
                        button.InnerHtml = "<i class=\"fa fa-spinner fa-pulse btn-green\"/></i>";
                        break;
                    case "btnRestart":
                        button.InnerHtml = "<i class=\"fa fa-refresh fa-spin btn-blue\"/></i>";

                        break;
                    default:
                        break;
                }
                uPanel.Update();
            }
        }
    }
}

然后在事件中,完成后将其改回:

private void BtnStart_Click(object sender, EventArgs e)
{
    HtmlButton button = (HtmlButton)sender;
    Debug.WriteLine("Button clicked: " + button.ID);

    // sleeping to simulate process stuffs
    Thread.Sleep(2000);

    button.InnerHtml = "<i class=\"fa fa-play btn-green\"/></i>";
    (button.Parent.Parent as UpdatePanel).Update();
}

是否有更“标准”的方法来做到这一点,或者这很好吗?

目前它不工作,因为演员:

UpdatePanel uPanel = (UpdatePanel)button.Parent;

给我一个错误:

  • $exception {“无法将“System.Web.UI.Control”类型的对象转换为“System.Web.UI.UpdatePanel”类型。”} System.InvalidCastException

似乎我从中获得的控制button.Parent无法转换为任何东西。我需要调用(button.Parent as UpdatePanel).Update();Page_Load此工作。建议?

编辑1:

需要调用:

UpdatePanel uPanel = (UpdatePanel)button.Parent.Parent;

由于第一个父级是ContentTemplateContainer.

代码现在运行没有错误,但图标永远不会改变fa-spinner然后返回。我的意图是在上述情况下它应该显示fa-spinner大约 2 秒钟,然后返回到其原始图标。

编辑2:

我意识到由于页面生命周期的原因,无法按照我尝试的方式执行此操作。页面不在回发Page_Load和按钮事件之间呈现所以即使InnerHtml按钮的 改变了,它也永远不会显示。所以我需要一个不同的方法来解决这个问题。

我们可以强制渲染有UpdatePanel问题的吗?我们可以创建一个解决方法来触发事件两次吗?第一次更改图标并工作,第二次更改图标?其他想法?

阿姆尔·埃尔加里

正如您所说,由于页面循环,您将无法看到页面加载和按钮单击事件之间的图标变化。

所以我建议在这种情况下使用一点 Javascript,就像@Mauricio 在他的评论中建议的那样。

您可以添加新的客户端事件 OnClientClick="showIcon"

function showIcon()
{
   document.getElementById('#myBtnId').innerHTML = <i class='fa fa-spinner fa-pulse btn-red'/></i>"
}

现在这个图标会在点击客户端的按钮后出现,当他刷新页面时,它会根据你的登录服务器端按钮点击事件消失。

当然,您需要在 javascript 中添加您的登录信息,因为它不像我写的那么简单,但我只是想告诉您我将如何解决这个问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何更改jQuery按钮图标

来自分类Dev

在Winform C#中禁用按钮时如何在按钮上设置焦点?

来自分类Dev

c#WPF,如何在单击按钮时展开表格?

来自分类Dev

如何在WPF中将对象传递给按钮单击事件处理程序?C#

来自分类Dev

如何在Tkinter中更改按钮图标

来自分类Dev

MVVMLight C#如何更改按钮内容

来自分类Dev

如何在C#中的program.cs中处理按钮单击事件

来自分类Dev

如何使用iText / C#更改PDF表单中的按钮图标

来自分类Dev

如何在Android材质组件中更改工具栏的后退按钮图标

来自分类Dev

HTML / CSS如何删除按钮图标

来自分类Dev

如何在MessagePage中将按钮图标更改回正常大小?

来自分类Dev

在Winform C#中禁用按钮时如何在按钮上设置焦点?

来自分类Dev

如何在单击按钮时快速更改按钮图标,python

来自分类Dev

单击按钮图标更改

来自分类Dev

当我单击C#中的另一个按钮时如何调用按钮单击事件

来自分类Dev

在原始Win32中使用C设置按钮图标

来自分类Dev

如何使用Css文件更改按钮文本的颜色onclick事件(asp.net,C#)?

来自分类Dev

如何在Visual Studio C#中将按钮单击事件添加到我自己的按钮中

来自分类Dev

单击时,向下滑动div并更改按钮图标

来自分类Dev

如何更改破折号按钮图标?

来自分类Dev

如何在Android中更改复选框按钮图标?

来自分类Dev

UWP后退按钮和事件处理程序-C ++

来自分类Dev

C#ASP.net如何在按钮事件结束时添加页面/面板的重新加载?

来自分类Dev

如何在C#中为按钮的动态2D数组创建单击事件处理程序

来自分类Dev

TinyMCE更改现有按钮图标

来自分类Dev

更改按钮文本而不更改按钮图标

来自分类Dev

C# if counter 如何在按下按钮后更改按钮“功能”

来自分类Dev

C#:如何更改 MVVM 中的按钮图标?

来自分类Dev

UWP C# 如何处理动态创建的按钮和控件的事件

Related 相关文章

  1. 1

    如何更改jQuery按钮图标

  2. 2

    在Winform C#中禁用按钮时如何在按钮上设置焦点?

  3. 3

    c#WPF,如何在单击按钮时展开表格?

  4. 4

    如何在WPF中将对象传递给按钮单击事件处理程序?C#

  5. 5

    如何在Tkinter中更改按钮图标

  6. 6

    MVVMLight C#如何更改按钮内容

  7. 7

    如何在C#中的program.cs中处理按钮单击事件

  8. 8

    如何使用iText / C#更改PDF表单中的按钮图标

  9. 9

    如何在Android材质组件中更改工具栏的后退按钮图标

  10. 10

    HTML / CSS如何删除按钮图标

  11. 11

    如何在MessagePage中将按钮图标更改回正常大小?

  12. 12

    在Winform C#中禁用按钮时如何在按钮上设置焦点?

  13. 13

    如何在单击按钮时快速更改按钮图标,python

  14. 14

    单击按钮图标更改

  15. 15

    当我单击C#中的另一个按钮时如何调用按钮单击事件

  16. 16

    在原始Win32中使用C设置按钮图标

  17. 17

    如何使用Css文件更改按钮文本的颜色onclick事件(asp.net,C#)?

  18. 18

    如何在Visual Studio C#中将按钮单击事件添加到我自己的按钮中

  19. 19

    单击时,向下滑动div并更改按钮图标

  20. 20

    如何更改破折号按钮图标?

  21. 21

    如何在Android中更改复选框按钮图标?

  22. 22

    UWP后退按钮和事件处理程序-C ++

  23. 23

    C#ASP.net如何在按钮事件结束时添加页面/面板的重新加载?

  24. 24

    如何在C#中为按钮的动态2D数组创建单击事件处理程序

  25. 25

    TinyMCE更改现有按钮图标

  26. 26

    更改按钮文本而不更改按钮图标

  27. 27

    C# if counter 如何在按下按钮后更改按钮“功能”

  28. 28

    C#:如何更改 MVVM 中的按钮图标?

  29. 29

    UWP C# 如何处理动态创建的按钮和控件的事件

热门标签

归档