Asp.NETMVC-ContentPlaceHolder-Javascript
根据我所在的页面,我希望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
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()…应该如何实现。听起来你是在追求美学,所以这个建议无论如何都不会给你想要的东西。