Рендеринг контекстного меню для каждой строки таблицы - PullRequest
0 голосов
/ 29 января 2019

Я хочу прикрепить обработчик событий для каждой строки таблицы.Когда пользователь щелкает правой кнопкой мыши на row, я хочу открыть небольшой модал рядом с этой строкой.Теперь, чтобы сделать это, я не знаю, как получить выбранную строку. Документация показывает, что UIMouseEventArgs будет использоваться. Я вижу, что у него есть только один параметр Type, который, как я предполагаю, равен либо mousedown, либо mouseover...etc (тип события мыши).

Как получить строку, по которой пользователь щелкнул правой кнопкой мыши?

Таблица

    @inherits DashboardBase
    @foreach (var ca in this.campaigns) {
                    <tr id="@ca.Id" onmousedown="@(async(ev)=>await OnClick(ev,ca))">
                        <td >@ca.Id</td>
                        <td>@ca.Name</td>
                        <td>@ca.State.Tag</td>
                        <td>@ca.CreatedAtUtc</td>
                        <td>@ca.IsPaused</td>
                        @if (this.SelectedId == ca.Id) {
                            <td><ModalHelper info="@ca"></ModalHelper></td>
                            @"test string"
                        }

                    </tr>
                }

 public class DashboardBase : BlazorComponent {

        protected long SelectedId = -1;
        [Parameter]
        protected Campaign.Dto.CampaignInfo[] campaigns { get; set; }
        protected  void OnClick(UIMouseEventArgs args,CampaignInfo campaign) {
            if (args.Button != 2) {

                return;
            }
            Console.WriteLine("You pressed right on campaignID:" + campaign.Id);
            this.SelectedId = campaign.Id;
            this.StateHasChanged();


        }


    }

Модальный

@inherits ModalHelperBase
<div>
    <button onclick="@(async()=>await OnDeletePressedAsync())">Delete</button>
</div>


public class ModalHelperBase:BlazorComponent {
        [Inject]
        private CampaignService campaignService { get; set; }
        [Parameter] protected CampaignInfo info { get; set; }

    }

Используя приведенный выше код, я могу напечатать текст, но если я пытаюсь отобразить компонент, я получаю ошибку:

blazor.server.js:23 Uncaught (in promise) Error: System.ArgumentException: There is no event handler with ID 7
   at Microsoft.JSInterop.DotNetDispatcher.InvokeSynchronously(String assemblyName, String methodIdentifier, Object targetInstance, String argsJson)
   at Microsoft.JSInterop.DotNetDispatcher.BeginInvoke(String callId, String assemblyName, String methodIdentifier, Int64 dotNetObjectId, String argsJson)
    at endInvokeDotNetFromJS (blazor.server.js:23)

1 Ответ

0 голосов
/ 29 января 2019

Попробуйте это:

В вашем методе OnMousePressed проверьте, какая кнопка была нажата.

if ( args.Button == 2) // right button clicked
{ 
   // Code to display your dialogbox
}

Что касается определения, какая строка была нажата, вы можете передать методу OnMousePressed значение ca.Иди и сделай что-нибудь с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...