为 table 的每一行呈现上下文菜单
Rendering contextmenu for each row of a table
我想为 table 的每一行附加一个事件处理程序。
当用户右键单击 row
时,我想在该行旁边打开一个小模式。
现在为了做到这一点,我不知道如何让选定的 row.The 文档显示 UIMouseEventArgs
为 used.I 看到它只有一个参数 Type
我认为是mousedown
或 mouseover
...等(鼠标事件的类型)。
如何获取用户右击的行?
Table
@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)
试试这个:
在您的 OnMousePressed 方法中检查单击了哪个按钮。
if ( args.Button == 2) // right button clicked
{
// Code to display your dialogbox
}
至于发现点击了哪一行,您可以将 ca.Id 的值传递给您的 OnMousePressed 方法并用它做一些事情。
我想为 table 的每一行附加一个事件处理程序。
当用户右键单击 row
时,我想在该行旁边打开一个小模式。
现在为了做到这一点,我不知道如何让选定的 row.The 文档显示 UIMouseEventArgs
为 used.I 看到它只有一个参数 Type
我认为是mousedown
或 mouseover
...等(鼠标事件的类型)。
如何获取用户右击的行?
Table
@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)
试试这个:
在您的 OnMousePressed 方法中检查单击了哪个按钮。
if ( args.Button == 2) // right button clicked
{
// Code to display your dialogbox
}
至于发现点击了哪一行,您可以将 ca.Id 的值传递给您的 OnMousePressed 方法并用它做一些事情。