我正在学习一门关于.NET Core8的课程,但我遇到了一个大问号.授课人员展示了一种添加TempData使用的Toastr的方法,如下所示:

<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js"></script>
@if (TempData["SuccessMessage"] != null)
{
    <script type="text/javascript">
        toastr.success('@TempData["SuccessMessage"]');
    </script>
}

现在,代码起作用了.然而..代码位于添加到_Layout(_Notification)的分部视图中:

<div class="container">
        <main role="main" class="pb-3">
            <partial name="../Category/_Notification" />
            @RenderBody()
        </main>
</div>

    <footer class="border-top text-muted fixed-bottom">
        <div class="container text-center">
            Made with <i class="bi bi-heart-pulse-fill"></i>
        </div>
    </footer>
    <script src="~/lib/jquery/dist/jquery.min.js"></script>
    <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
    <script src="~/js/site.js" asp-append-version="true"></script>
    
    @await RenderSectionAsync("Scripts", required: false)

我的问题是:为什么我需要在局部视图中添加脚本,而例如jquery.min.js已经添加到脚本部分in_layout中?当我将所有脚本添加到_Layout而不是将其添加到部分视图时,为什么它不起作用?

非常感谢所有的答案.

推荐答案

why do I need to add the scripts within the partial view,这不是必须的,您可以将其放在局部视图或_layout中.当您将脚本放在视图中时,脚本将仅在需要时加载,从而减少了不必要的脚本加载,并使应用程序更加模块化和高效.但如果您将所有脚本放在_layout中,每个视图都会加载这些脚本,即使它们不需要.

在您的代码中

<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/js/toastr.min.js"></script>

必须放在toastr.success('@TempData["SuccessMessage"]');之前,但在_Layout中,jquery.min.js放在<partial name="../Category/_Notification" />之后,所以它不起作用.你可以试着把它放在<head></head>,然后你会发现它像预期的那样工作.

Update:

If you put the script in the partial view, It will render in html like: enter image description here

如果您try 在部分视图中将jquery.min.jstoastr.min.js放在toastr.success('@TempData["SuccessMessage"]');之后,您会发现它也不起作用,所以我们可以得出结论,这两个脚本必须放在toastr.success('@TempData["SuccessMessage"]');之前.现在我们可以将这两个脚本放在toastr.success('@TempData["SuccessMessage"]');之前的任何位置

enter image description here If I put these two scripts in the top of <body></body> it can also works well. Because I don't like to mix html code and javascript code, So i choose to place it in <head>

.net相关问答推荐

为什么Regex.Escape支持数字符号和空格?

在 F# 中处理 Option - Some(null) 的好策略是什么

是否有内置方法将 nuget 包引用为 csproj 中的文件?

查询 MongoDb 中嵌入式文档中的一个字段,该字段抛出调用运算符的左侧必须是对持久属性的直接访问

在.NET C#中截断整个单词的字符串

.gitignore 和 Visual Studio 项目:忽略 bin/Debug 目录但不忽略 bin/Release 目录

string.Format 如何处理空值?

使用 IIS Express 托管网站(临时)

如何将字符串列表数据绑定到 WPF/WP7 中的 ListBox?

XmlNode 值与内部文本

.net:System.Web.Mail 与 System.Net.Mail

如何使用反射在 .NET 中调用重载方法

C# 编译为 32/64 位,或任何 cpu?

如何使我的托管 NuGet 包支持 C++/CLI 项目?

覆盖 ASP.NET MVC 中的授权属性

从 C# 中的字符串中删除最后一个字符.优雅的方式?

如何判断对象是否已在 C# 中释放

.NET 的 XPath 和 XSLT 2.0?

当它被抛出和捕获时,不要在那个异常处停止调试器

为什么 IList 不支持 AddRange