Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.NETMVC-ContentPlaceHolder-Javascript_Javascript_Asp.net Mvc_Contentplaceholder - Fatal编程技术网

Asp.NETMVC-ContentPlaceHolder-Javascript

Asp.NETMVC-ContentPlaceHolder-Javascript,javascript,asp.net-mvc,contentplaceholder,Javascript,Asp.net Mvc,Contentplaceholder,根据我所在的页面,我希望javascript函数的内容发生变化 例如: 母板页 Cufon.now(); Cufon.replace('p#characters',{fontFamily:'Helvetica95 Black'}); A页 Cufon.now(); Cufon.replace('p#characters',{fontFamily:'Helvetica95 Black'}); Cufon.replace('p#others',{fontFamily:'Helvetica95

根据我所在的页面,我希望javascript函数的内容发生变化

例如:

母板页

Cufon.now();
Cufon.replace('p#characters',{fontFamily:'Helvetica95 Black'});
A页

Cufon.now();
Cufon.replace('p#characters',{fontFamily:'Helvetica95 Black'});
Cufon.replace('p#others',{fontFamily:'Helvetica95 Black'});
因为我不想重复代码,所以我正在寻找解决方案。我想也许我可以使用像这样的内容占位符(但它不起作用):


Cufon.now();
Cufon.replace('p#characters',{fontFamily:'Helvetica95 Black'});
有什么办法解决这种问题吗

更新 我想避免的是使用这样的代码:

// 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>
<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>
//按母版页添加
Cufon.now();
Cufon.replace('p#characters',{fontFamily:'Helvetica95 Black'});
//按A页添加
Cufon.now();
Cufon.replace('p#others',{fontFamily:'Helvetica95 Black'});
//按B页添加
Cufon.now();
Cufon.replace('p#main',{fontFamily:'Helvetica95 Black'});
Cufon.replace('p#menu',{fontFamily:'Helvetica95 Black'});
因为这类代码可以工作,但它不是清洁的方式。我更喜欢这样的东西:

// 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>
<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>

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'});

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

为什么不简单地将附加代码添加到脚本标记之外的内容占位符中

所以,你会有这样的想法:

<head>
   <script type="text/javascript">
      // do some stuff
   </script>
   <asp:ContentPlaceHolder runat="server" id="someid" />
</head>
...
在其他一些地点:

addCallback(function() {
   ...
});
然后在页面底部,就在

for(var i=0;i
你能提供更多关于要求的细节吗?例:上面的代码应该做什么,是否必须一次执行所有代码,是否依赖于创建的局部变量,是否必须在特定时间运行,等等

编辑: 在新的MVC项目中使用内容占位符对我来说似乎很好。Intellisense没有拾取它,但渲染正确。下面是我的代码

在母版页中:

...
<script type="text/javascript">
    var inTheMasterPage;
    <asp:ContentPlaceHolder runat="server" id="js1">
    </asp:ContentPlaceHolder>
</script>
。。。
母版页;

在页面中:

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

<asp:Content runat="server" ContentPlaceHolderID="js1">
    var inThePage;
</asp:Content>
...

第二页;
...
以及呈现的HTML:

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

    var inThePage;

    </script> 
</head> 

母版页;
第二页;

理想情况下,您需要累积这些部分脚本,并在页面末尾将它们呈现为一个块

不是100%确定如何在MVC中做到这一点,但您应该能够将horn鞋穿到您可以使用的MVC中。基本上,这可以创建脚本标记和代码,同时提供更多的服务器端控制。话虽如此,您需要与母版页进行通信。您可以将StringBuilder公开为母版页的公共属性:

StringBuilder javascriptCode = new StringBuilder();
javascriptCode.Append("Cufon.now();" + System.Environment.NewLine);
javascriptCode.Append("Cufon.replace('p#characters', { fontFamily: 'Helvetica95-Black' });" + System.Environment.NewLine);
public StringBuilder JSCode
{
    get { return javascriptCode; }
}
在内容页中,添加MasterType指令以访问主对象:

<%@ MasterType VirtualPath="~/virtualPath/nameOfMasterPage.page" %>
我还没有测试过这段代码,所以如果有任何问题,请告诉我。这可能有点不方便,但它应该将所有JavaScript组合到页面上的一个脚本块中


编辑:我也不知道这是否适用于MVC,选择器的优点之一是对象不必存在于页面上。您还可以在一次点击中为Cufon提供多个选择器

所以,如果你把它放在你的主页上,它应该可以正常工作

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

Cufon.now();
Cufon('p#characters,p#others,p#main,p#menu',{fontfamice:'Helvetica95 Black'});

ContentPlaceHolder是个好主意,你只是把它放错了位置 也可以覆盖它们

在母版页中

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

    <asp:ContentPlaceHolder id="cphJS" runat="server" />
</script>

Cufon.now();
Cufon.replace('p#characters',{fontFamily:'Helvetica95 Black'});
在A页

<asp:Content ID="scriptContent" ContentPlaceHolderID="scripts" runat="server">
   <script type="text/javascript">
       Cufon.now();
       Cufon.replace('p#characters', { fontFamily: 'Helvetica95-Black' });
       Cufon.replace('p#others', { fontFamily: 'Helvetica95-Black' });
   </script>
</asp:contentplaceholder>

Cufon.now();
Cufon.replace('p#characters',{fontFamily:'Helvetica95 Black'});
Cufon.replace('p#others',{fontFamily:'Helvetica95 Black'});
页面中的内容将覆盖母版页中的内容

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

    <asp:ContentPlaceHolder id="cphJS" runat="server" />
</script>
若你们想附加脚本,那个么把你们的内容放在母版页上

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

    <asp:ContentPlaceHolder id="cphJS" runat="server" />
</script>

Cufon.now();
Cufon.replace('p#characters',{fontFamily:'Helvetica95 Black'});
在页面A中,不要放置脚本标记

<asp:Content ID="scriptContent" ContentPlaceHolderID="cphJS" runat="server">
        Cufon.replace('p#others', { fontFamily: 'Helvetica95-Black' });
</asp:contentplaceholder>

Cufon.replace('p#others',{fontFamily:'Helvetica95 Black'});

RegisterClientScriptBlock需要一个服务器表单,这在ASP.NET MVC中从未使用过。我喜欢您使用的逻辑,但正如Eilon所说,RegisterClientScriptBlock无法使用……您能否将您的示例更具体地说明我的问题。因为我不确定addCallback(function()…应该如何实现。听起来你是在追求美学,所以这个建议无论如何都不会给你想要的东西。