首页 > 解决方案 > 调用 C# 函数 Blazor Jquery

问题描述

需要一些帮助排序错误添加了代码截图和代码返回的错误。尝试从 Jquery 调用 C# 函数并传递参数。

_主持人

        function getElementSVG(e) {
            var position = getPosition(e);
            var circle = makeSVG('circle', { cx: position.pointx, cy: position.pointy, r: 0.02, stroke: 'black', 'stroke-width': 0.5, fill: 'black' });
            document.getElementById(e.currentTarget.id).appendChild(circle);
            DotNet.invokeMethodAsync('PeopleCounterWeb', 'AddPointToList', position.pointx, position.pointy).then(result => {
                console.log(result);
            });
            return position;
        }

        function fnsuccesscallback(data) {
            alert(data.d);

        }

        function fnerrorcallback(result) {
            alert(result.statusText);
        }
        function makeSVG(tag, attrs) {
            var el = document.createElementNS('http://www.w3.org/2000/svg', tag);
            for (var k in attrs)
                el.setAttribute(k, attrs[k]);
            return el;
        }
        function getPosition(e) {
            var rect = e.target.getBoundingClientRect();
            var x = e.clientX - rect.left;
            var y = e.clientY - rect.top;

            var width = rect.width;
            var height = rect.height;
            var pointx = ((x / width) * 100).toFixed(2);
            var pointy = ((y / height) * 100).toFixed(2);
            return {
                pointx,
                pointy
            }
        };

MainMap.cshtml

    [JSInvokable]
    public string AddPointToList(string x, string y)
    {
        var alpha = x + "-" + y;
        return "";
        //Points.Add(obj[0], obj[1]);
    }

代码

[错误]

标签: c#jqueryblazorblazor-jsinterop

解决方案


您试图在不传递对该实例的引用的情况下调用实例上的消息。如果没有实例,您只能调用静态方法。

您需要在 C# 中创建 DotNetReference 的实例并将其传递给 JS。

Blazor 大学有一节关于从 JS 调用 C# - https://blazor-university.com/javascript-interop/calling-dotnet-from-javascript/


推荐阅读