【问题标题】:Click event not working in Blazor while using JQuery Datatable使用 JQuery 数据表时单击事件在 Blazor 中不起作用
【发布时间】:2021-07-18 20:13:44
【问题描述】:

我已经在 OnAfterRenderAsync 中初始化了 Datatable,它工作正常 但是 onclick 事件不起作用。

Grid.razor

<tbody>
    @foreach (RecommendedActivityCreateViewModel model in activityList)
    {
        <tr>
            <td><img src="@model.image_url" width="100" /></td>
            <td>@model.title</td>
            <td>@model.description</td>
            <td>@model.created_at.ToString("dd-MMM-yyyy")</td>                                    
            <td nowrap="nowrap">                                        
                <button @onclick="(()=>EditData(model.Id))" data-toggle="modal" data-target="#AddEditEmpModal" class="btn btn-sm btn-clean btn-icon" title="Edit details">
                    <i class="la la-edit"></i>
                </button>
                <a class="btn btn-sm btn-clean btn-icon delete-link" data-url="api/RecommendedActivity/" data-id="@model.Id" title="Delete">
                    <i class="la la-trash"></i>
                </a>
            </td>
        </tr>
    }
</tbody>

GridModel.cs

public class GridModel : ComponentBase
{
    [Inject]
    protected HttpClient Http { get; set; }

    protected async Task EditData(string id)
    {
        await Http.GetAsync($"api/RecommendedActivity/{id}");
    }
}

【问题讨论】:

    标签: asp.net-core blazor blazor-webassembly asp.net-blazor


    【解决方案1】:

    当您说“我已经在 OnAfterRenderAsync 中初始化了 Datatable”时,下面的示例会执行此操作,如果您复制、粘贴并运行它,您会发现没有渲染任何内容。呈现页面后,您已获取数据。获取OnInitializedAsync中的数据,就可以了。

    您还说“它工作正常,但 onclick 事件不起作用。” EditData 方法应该在 Grid.razor 而不是 GridModel 中,它似乎在提供的代码 sn-ps 中。

    下面的代码显示了一个简单的工作示例(OnInitializedAsync 中的GetData)。

    @page "/Test"
    
    @foreach (var country in Countries)
    {
        <div>@country.Country <button class="btn-btn-dark" @onclick="() => OnClick(country.Id)">Edit</button></div>
    }
    
    @code {
        class Model
        {
            public int Id { get; set; }
            public string Country { get; set; }
        }
    
        private List<Model> Countries = new List<Model>();
    
        protected Task OnClick(int id)
        {
            var x = id;
            return Task.CompletedTask;
        }
    
        protected override Task OnInitializedAsync()
        {
            // GetData();
            return base.OnInitializedAsync();
        }
    
        protected override Task OnAfterRenderAsync(bool firstRender)
        {
            GetData();
            return base.OnAfterRenderAsync(firstRender);
        }
    
        protected void GetData()
        {
            Countries = new List<Model>()
    {
                new Model(){ Id=1, Country = "UK"},
                new Model(){ Id=2, Country = "Spain"},
                new Model(){ Id=3, Country = "Portugal"}
            };
    
        }
    }
    

    【讨论】:

    • 我保留了一些我认为不言自明的东西,例如 GridModel.cs 正在继承 ComponentBase 类,因此事件需要出现在 razor 页面上,因为我在 razor 页面中继承了 GridModel。我的问题是使用 jQuery Datatable 时单击事件不起作用,其他一切似乎都正常。
    • 如果Grid.razor 继承自GridModel,那么您可以调用EditData。您需要解释“JQuery 数据库”的含义。如果您在 Blazor 呈现 DOM 后使用 JQuery 来操作 DOM,则很容易破坏 Blazor。 Blazor 和 JQuery 不是很好的合作伙伴!
    • 请看一下...它的 Jquery Datatable 不是数据库 datatables.net/examples/basic_init/zero_configuration.html
    猜你喜欢
    • 1970-01-01
    • 2018-02-02
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-23
    • 2019-01-01
    相关资源
    最近更新 更多