[英]how to work with javascript function for asp.net checkbox control which is placed in contentplaceholder?
[英]Asp.Net Mvc - ContentPlaceHolder- Javascript
根據我的頁面,我希望更改javascript函數的內容。
示例:
<script type="text/javascript">
Cufon.now();
Cufon.replace('p#characters', { fontFamily: 'Helvetica95-Black' });
</script>
<script type="text/javascript">
Cufon.now();
Cufon.replace('p#characters', { fontFamily: 'Helvetica95-Black' });
Cufon.replace('p#others', { fontFamily: 'Helvetica95-Black' });
</script>
因為我不想重復代碼,所以我正在尋求解決方案。 我想也許我可以使用像這樣的ContentPlaceHolder(但它不起作用):
<script type="text/javascript">
Cufon.now();
Cufon.replace('p#characters', { fontFamily: 'Helvetica95-Black' });
<asp:ContentPlaceHolder id="cphJS" runat="server" />
</script>
有什么方法可以解決這類問題嗎?
我想避免的是擁有這樣的代碼:
// 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>
結果是一樣的。 我只發現第二個輸出更干凈。
為什么不簡單地在腳本標記之外的內容占位符中添加其他代碼?
所以,你會有類似的東西:
<head>
<script type="text/javascript">
// do some stuff
</script>
<asp:ContentPlaceHolder runat="server" id="someid" />
</head>
...
或者,您可以在頁面的早期收集數組中的函數,然后稍后執行它們,如下所示:
在<head>中:
var callbacks = [];
function addCallback(arg) {
callbacks.push(arg);
}
在其他一些地方:
addCallback(function() {
...
});
然后在頁面底部,就在</ body>之前:
for (var i = 0; i < callbacks.length; i++) {
var c = callbacks[i];
if (c && c instanceof Function)
c();
}
您能否提供有關要求的更多詳細信息? 例如:上面的代碼應該做什么,是否必須一次執行,是否依賴於創建的局部變量,是否必須在特定時間運行等等。
編輯:在新的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>
您可以使用RegisterClientScriptBlock 。 基本上,這可以創建腳本標記和代碼,同時為您提供更多的服務器端控制。 話雖如此,您需要與母版頁進行通信。 您可以將StringBuilder公開為Master Page的公共屬性:
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指令以訪問Master對象:
<%@ MasterType VirtualPath="~/virtualPath/nameOfMasterPage.page" %>
在您的內容頁面中,您可以添加更多JavaScript代碼並調用RegisterClientScriptBlock:
Master.JSCode.Append("Cufon.replace('p#others', { fontFamily: 'Helvetica95-Black' });" + System.Environment.NewLine);
ClientScriptManager clientScript = Page.ClientScript;
clientScript.RegisterClientScriptBlock(this.Page.GetType(), "MadeUpNameForJSScript", Master.JSCode.ToString(), true);
我沒有測試過這段代碼,所以如果有任何問題請告訴我。 這可能是一個不方便的方法,但它應該將所有JavaScript組合到頁面上的一個腳本塊中。
編輯:我也不知道這是否適用於MVC
ContentPlaceHolder是一個好主意,你只是錯過了它也可以覆蓋它們
在母版頁面中
<asp:contentplaceholder id="scripts" runat="server" >
<script type="text/javascript">
Cufon.now();
Cufon.replace('p#characters', { fontFamily: 'Helvetica95-Black' });
</script>
</asp:contentplaceholder>
在第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>
頁面中的內容將覆蓋母版頁中的內容
如果要附加腳本,請將內容占位符保留在母版頁中
<script type="text/javascript">
Cufon.now();
Cufon.replace('p#characters', { fontFamily: 'Helvetica95-Black' });
<asp:ContentPlaceHolder id="cphJS" runat="server" />
</script>
在您的頁面A中不要放置腳本標記
<asp:Content ID="scriptContent" ContentPlaceHolderID="cphJS" runat="server">
Cufon.replace('p#others', { fontFamily: 'Helvetica95-Black' });
</asp:contentplaceholder>
理想情況下,您需要累積這些部分腳本,並將它們作為一個塊呈現在頁面末尾
不是100%確定如何在MVC中執行此操作,但這是一個純ASP.NET的示例 ,您應該能夠將其轉化為MVC
選擇器的一個優點是對象不必存在於頁面上。 您還可以在一次點擊中為Cufon提供多個選擇器...
所以,如果你把它放在你的母版頁中它應該工作...
<script type="text/javascript">
Cufon.now();
Cufon('p#characters, p#others, p#main, p#menu', { fontFamily: 'Helvetica95-Black' });
</script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.