【问题标题】:conditional change of script tag based on url routing mvc 3基于 url 路由 mvc 3 的脚本标签的条件更改
【发布时间】:2012-10-20 18:11:03
【问题描述】:

我将 requireJS 用于我的混合应用程序。现在我需要使用 url 上的条件更改位于我的布局页面中的脚本标记。脚本标签看起来像这样

<script data-main="@Url.Content("~/Scripts/main")" src="@Url.Content("~/Scripts/Libs/Requirejs/require.min.js")" type="text/javascript"></script>

现在,当页面加载 /Home/Login 时,上面的脚本标签应更改为

<script data-main="@Url.Content("~/Scripts/login")" src="@Url.Content("~/Scripts/Libs/Requirejs/require.min.js")" type="text/javascript"></script>

当我再次加载页面时 /Mail/Index 上面的脚本标签应该变为

<script data-main="@Url.Content("~/Scripts/mail")" src="@Url.Content("~/Scripts/Libs/Requirejs/require.min.js")" type="text/javascript"></script>

现在请注意,所有三个页面都使用相同的 **_Layout.cshtml** page 。并且上面的脚本标签仅位于**_Layout.cshtml** 页面中。现在我如何跟踪这个脚本来更改上面提到的 URL 路由更改时的脚本标签?

【问题讨论】:

    标签: javascript asp.net-mvc-3 asp.net-mvc-routing requirejs


    【解决方案1】:

    我只想为此使用一个部分。在布局页面中:

    @RenderSection("RequireScripts")
    

    并将脚本放在每个页面中:

    @section RequireScripts {
        <script data-main="@Url.Content("~/Scripts/main")" src="@Url.Content("~/Scripts/Libs/Requirejs/require.min.js")" type="text/javascript"></script>
    }
    

    如果您想避免重写整个内容(只需要相对路径),那么我想您可以使用动态 Page 变量:

    @if (Page.RequireScript != null)
    {
        <script src='~/Scripts/@Page.RequireScript'></script>
    }
    

    然后脚本块将输出到定义RequireScript的页面。

    @{
        Page.RequireScript = "Libs/Requirejs/require.min.js";
    }
    

    【讨论】:

    • 感谢第二个解决方案似乎更加优雅。但是有两个查询。在&lt;script src='~/Scripts/@Page.RequireScript'&gt;&lt;/script&gt; 中,@Page.Requirescript 是变量还是 Mvc 特性本身?第二个是我可以在该部分中使用任何可能导致从子页面呈现到data-main 属性的变量吗?
    • @Joy 它是一个变量,而不是 MVC 本身的特性。 Page 是一个 dynamic 对象,因此您可以将任何您想要的属性放入其中。关于你的第二个问题,我不太明白,你介意改写一下吗?
    • 没关系。我得到了我想要的。你的回答给出了我真正需要的点:)谢谢兄弟:)
    猜你喜欢
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 2011-10-16
    相关资源
    最近更新 更多