对于任何想了解@Mister Magoo提出的解决方案的人来说,这不再是.NET 6的预览版本,并且有一些示例文档在这里。
简而言之:
创建一个带有EventHandlerAttribute的C#类:
[EventHandler("oncityclicked", typeof(CustomSelectionCityEventArgs),
enableStopPropagation: true, enablePreventDefault: true)]
public static class EventHandlers
{
}
public class CustomSelectionCityEventArgs: EventArgs
{
public Guid Id { get; set; }
}
在
<script src="_framework/blazor.webview.js" autostart="false"></script>
之后将 JS 添加到
./wwwroot/index.html
中:
<script>
Blazor.registerCustomEventType('cityclicked', {
createEventArgs: event => {
return {
id: event.detail
};
}
});
</script>
在你的 Razor 中:
@code {
private void HandleCityClicked(CustomSelectionCityEventArgs eventArgs)
{
Console.WriteLine("Bouep");
}
}
<div id="CarteLeaflet" @oncityclicked="HandleCityClicked"></div>
最后,在JS中,您可以分派事件:
function OnMarkerClick(pId) {
const event = new CustomEvent('cityclicked', {
bubbles: true,
detail: pId
});
document.getElementById('CarteLeaflet').dispatchEvent(event);
}
不要犯和我一样的错误,在C#中事件名称应该以"on"开头(JS: "cityclicked",C#: "oncityclicked")。
<div id='foo' @onchange=HandleHello></div>
这样的东西,然后在您的JS代码中,每当捕获到hello
事件时,就向foo
分派一个change
事件。 - Mister Magoo