Asp.Net-核心传递JavaScript函数到局部视图

Asp.Net-Core pass JavaScript function to partial view

使用 asp.net-core 我制作了一个“PopUp.cshtml”文件:

<div class="popUpDeleteBackground" hidden>
    <div class="popUpDelete">
        <h3>Are you sure you want to delete this?</h3>
        <p>This action is irreversible</p>
        <div class="popUpDeleteButtonDiv">
            <button class="btn deleteConfirm">JA</button>
            <button class="btn" onclick="PopUpRemove()">NEE</button>
        </div>
    </div>
</div>
<script>
    function PopUpShow(licensePlate) {
        $(".popUpDeleteBackground").attr("hidden", false);

        $(".deleteConfirm").on("click", () => {
            Delete(licensePlate);
            PopUpRemove();
        });
    }
    function PopUpRemove() {
        $(".popUpDeleteBackground").attr("hidden", true);
    }
</script>

我希望在网站的多个页面中使用此弹出部分。问题是每个页面的删除功能都不一样。
所以我的问题是:有没有办法将 JavaScript 函数传递给局部视图?

到目前为止我尝试过的是用 @await Html.PartialAsync("_ConfirmPopUp", "functionToRun()"); 传递一个字符串,然后尝试用 <script>@Model</script>.
传递一个字符串 运行 但是我在控制台中收到一条错误消息:“Uncaught SyntaxError: Unexpected token '&'”。

您正在将 functionToRun() 作为字符串传递给视图的模型。相反,只需传递不带括号的函数名称 - functionToRun.

那代码里就不要写<script>@Model</script>了。而是在页面加载时动态地放置调用函数的名称,如下所示:

<script>
    function PopUpShow(licensePlate) {
        $(".popUpDeleteBackground").attr("hidden", false);

        $(".deleteConfirm").on("click", () => {
            //Delete(licensePlate);
            @string.Format("{0}();", Model)
            PopUpRemove();
        });
    }
    function PopUpRemove() {
        $(".popUpDeleteBackground").attr("hidden", true);
    }
</script>

这将呈现单击 .deleteConfirm 元素时调用的函数的名称。请注意 @string.Format("{0}();", Model) 代码而不是 Delete 函数调用。