Asp.Net Mvc - ContentPlaceHolder- Javascript

Mel*_*sus 2 javascript asp.net-mvc contentplaceholder

根据我的页面,我希望更改javascript函数的内容.

示例:

母版

<script type="text/javascript">
    Cufon.now();
    Cufon.replace('p#characters', { fontFamily: 'Helvetica95-Black' });
</script>
Run Code Online (Sandbox Code Playgroud)

页面A.

<script type="text/javascript">
    Cufon.now();
    Cufon.replace('p#characters', { fontFamily: 'Helvetica95-Black' });
    Cufon.replace('p#others', { fontFamily: 'Helvetica95-Black' });
</script>
Run Code Online (Sandbox Code Playgroud)

因为我不想重复代码,所以我正在寻求解决方案.我想也许我可以使用像这样的ContentPlaceHolder(但它不起作用):

<script type="text/javascript">
    Cufon.now();
    Cufon.replace('p#characters', { fontFamily: 'Helvetica95-Black' });

    <asp:ContentPlaceHolder id="cphJS" runat="server" />
</script>
Run Code Online (Sandbox Code Playgroud)

有什么方法可以解决这类问题吗?

UPDATE

我想避免的是拥有这样的代码:

// Add by MasterPage
<script type="text/javascript">
    Cufon.now();
    Cufon.replace('p#characters', { fontFamily: 'Helvetica95-Black' });
</script>

// Add by Page A
<script type="text/javascript">
    Cufon.now();
    Cufon.replace('p#others', { fontFamily: 'Helvetica95-Black' });
</script>

// Add by Page B
<script type="text/javascript">
    Cufon.now();
    Cufon.replace('p#main', { fontFamily: 'Helvetica95-Black' });
    Cufon.replace('p#menu', { fontFamily: 'Helvetica95-Black' });
</script>
Run Code Online (Sandbox Code Playgroud)

因为这种代码有效,但它不是清理方式.我更喜欢这样的东西:

<script type="text/javascript">
    Cufon.now();        
    Cufon.replace('p#characters', { fontFamily: 'Helvetica95-Black' });
    Cufon.replace('p#others', { fontFamily: 'Helvetica95-Black' });
    Cufon.replace('p#main', { fontFamily: 'Helvetica95-Black' });
    Cufon.replace('p#menu', { fontFamily: 'Helvetica95-Black' });
</script>
Run Code Online (Sandbox Code Playgroud)

结果是一样的.我只发现第二个输出更干净.

Bry*_*ews 5

为什么不简单地在脚本标记之外的内容占位符中添加其他代码?

所以,你会有类似的东西:

<head>
   <script type="text/javascript">
      // do some stuff
   </script>
   <asp:ContentPlaceHolder runat="server" id="someid" />
</head>
...
Run Code Online (Sandbox Code Playgroud)

或者,您可以在页面的早期收集数组中的函数,然后稍后执行它们,如下所示:

在<head>中:

var callbacks = [];
function addCallback(arg) {
   callbacks.push(arg);
}
Run Code Online (Sandbox Code Playgroud)

在其他一些地方:

addCallback(function() {
   ...
});
Run Code Online (Sandbox Code Playgroud)

然后在页面底部,就在</ body>之前:

for (var i = 0; i < callbacks.length; i++) {
   var c = callbacks[i];
   if (c && c instanceof Function)
      c();
}
Run Code Online (Sandbox Code Playgroud)

您能否提供有关要求的更多详细信息?例如:上面的代码应该做什么,是否必须一次执行,是否依赖于创建的局部变量,是否必须在特定时间运行等等.

编辑:在新的MVC项目中使用内容占位符似乎对我来说很好.Intellisense没有拿起它,但它正确呈现.这是代码对我来说的样子.

在母版页中:

...
<script type="text/javascript">
    var inTheMasterPage;
    <asp:ContentPlaceHolder runat="server" id="js1">
    </asp:ContentPlaceHolder>
</script>
Run Code Online (Sandbox Code Playgroud)

...

在页面中:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content runat="server" ContentPlaceHolderID="js1">
    var inThePage;
</asp:Content>
...
Run Code Online (Sandbox Code Playgroud)

并呈现的HTML:

    <script type="text/javascript"> 
        var inTheMasterPage;

    var inThePage;

    </script> 
</head> 
Run Code Online (Sandbox Code Playgroud)