【问题标题】:Component Service Duplicate Error In BlazorBlazor 中的组件服务重复错误
【发布时间】:2019-11-21 20:58:50
【问题描述】:
public class MyButton
{
    public string Class { get; set; }
    public string Name { get; set; }
    public event EventHandler OnClickEvent;
    public void EventLoad() 
    {
        OnClickEvent?.Invoke(this,EventArgs.Empty);
    }
}

public class ToolbarService
{
    public List<MyButton> MyButtons { get; set; } = new List<MyButton>();      
    public ToolbarService()
    {
        MyButtons.Add(new MyButton
        {
            Name="Save",
            Class="btn btn-primary",               
        });
        MyButtons.Add(new MyButton
        {
            Name = "Update",
            Class = "btn btn-success",
        });
        MyButtons.Add(new MyButton
        {
            Name = "Remove",
            Class = "btn btn-danger",
        });           
    }

}

public class MyBaseComponent : ComponentBase
{
    [Inject] public ToolbarService ToolbarService { get; set; }

    protected override void OnInitialized()
    {
        MyEventLoads();
    }

    public void MyEventLoads() 
    {
        foreach (var item in ToolbarService.MyButtons)
        {
            item.OnClickEvent += ButtonItems;
        }

    }

    private void ButtonItems(object sender, EventArgs e)
    {
        var btn = (MyButton)sender;
        switch (btn.Name)
        {
            case "Save":
                Save();
                break;
            case "Update":
                Update();
                break;
            case "Remove":
                Remove();
                break;
        }
    }

    protected virtual void Remove()
    {
        Console.WriteLine("Base Remove");
    }

    protected virtual void Update()
    {
        Console.WriteLine("Base Update");
    }

    protected virtual void Save()
    {
        Console.WriteLine("Base Save");
    }
   }
public class ToolbarMenuBase : MyBaseComponent
{

}


public class IndexBase : MyBaseComponent
{
    protected override void Save()
    {
        Console.WriteLine("Save Override");
    }

}

Screenshot

当工具栏覆盖索引页面中组件的保存方法时,它会执行两次该方法,如屏幕截图所示。

单击“保存”按钮时,它会将“基本单击”和“保存覆盖”消息写入控制台。通常,我必须将“保存覆盖”写入控制台,因为我覆盖了索引页面上的方法。

【问题讨论】:

  • 我正在使用 Blazor Web 程序集。应用程序中不存在 _host 文件。

标签: c# asp.net .net blazor blazor-server-side


【解决方案1】:

以下是我对您发布的代码所做的唯一更改

我创建了一个组件文件 (IndexBase.razor),而不是 IndexBase 的类定义,如下所示:

@inherits  MyBaseComponent


<input type="button" value="Save" @onclick="Save" />

@code {
    // Overrides the base class Save method
    protected override void Save()
    {
        // This will print the string "Save Override"
        Console.WriteLine("Save Override");
        // Call base class's Save method (for test purposes, of course)
        // This will output the string "Base Save"
        base.Save();
    }

}

用法:&lt;IndexBase /&gt;

注意:你的代码很好...添加 html 内容(按钮等,就像我做的那样)

【讨论】:

    【解决方案2】:

    您订阅了两次按钮点击事件:一次在“ToolbarMenuBase”中,一次在“IndexBase”中。

    【讨论】:

    • 方法,定义为虚方法,我压垮上层?
    • 我不确定您的意思...您有 2 个 MyBaseComponent 实例,因此您订阅了两次。
    • 其中一个实例是 IndexBase,其中调用了 Save 方法覆盖,如您在日志中所见。
    • 有什么办法可以给我建议吗?我该怎么做?
    • 取决于你想要做什么。我不明白您为什么要订阅工具栏中的按钮事件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-27
    • 2020-03-06
    • 2021-02-20
    • 1970-01-01
    • 2021-08-31
    • 2020-06-23
    • 2022-01-22
    相关资源
    最近更新 更多