2009-05-26 59 views
3

我有一些JavaScript在ASP.NET頁面看起來像這樣:AJAX和ASP.net,引用服務器控件的外部文件

var list = $get('<%=Topics.ClientID %>'); 

我現在已經寫了許多功能,其中該語法使用,我想集中我的JavaScript並將其移入外部JavaScript文件。但是,由於無法找到「主題」,因此這會打破。

使這項工作最好的策略是什麼?我假設我應該將控制/控制信息作爲參數傳遞給函數,但似乎無法使語法起作用。有什麼建議麼?

回答

1

這是ASP.NET JS開發的常見問題。至於我,我每次都用同樣的方法,看起來很好。

我使用Javascript功能來OOP,所以我大部分的JS外部文件看起來像:

function CouponManager() 
{ 
} 

而且在代碼的.aspx我做:

<script language="javascript"> 
    var couponManager = new CouponManager(); 
</script> 

如果我需要通過一些參數更改類的聲明:

function CouponManager(params) 
{ 
    // .. stuff here 

    this.initialize = function(initParams) 
    { 
     // .. accessing initParams variable for server control IDs 
    }; 

    this.initialize(params); 
} 

而且從代碼的.aspx我做了以下內容:

<script language="javascript"> 
    var couponManager = new CouponManager 
    ({ 
     txtCouponNameId = '<%= txtCouponName.ClientID %>', 
     txtCouponDescriptionId = '<%= txtCouponDescription.ClientID %>' 
    }); 
</script> 

此方法允許我將.as從.aspx頁面中分離出來,並將所有服務器控件依賴項都放在一個標記中。

1

您應該從usercontol內部創建一個javascript方法,該方法返回客戶端元素。然後在其他網頁/控制,只需訪問該方法

在用戶控制

<script language="javascript"> 
    function GetTopics() { 
      return = $get('<%=Topics.ClientID %>'); 
    } 
</script> 

在其他頁/控制

<script language="javascript"> 
    var list = GetTopics(); 
</script> 

編輯 - 您所面臨的問題是你需要的主題。 ClientID不存在的地方。所以彌合這個差距的唯一真正的方法是把它放在一個共同的地方。如果你真的不想這樣做,你可以嘗試通過其他標準來選擇你的元素。如果你使用jQuery,你可以用一類主題標記一個元素,然後用$(「。Topics」)找到它。

+0

對不起,我不是更具體。我正在尋找將JavaScript集中到外部JavaScript文件而不是用戶控件。我已經更新了這個問題。 – dtrickett 2009-05-26 15:02:04

0

如果您知道每個頁面只有一個名爲「Topics」的服務器控件,並且您使用命名約定,那麼您可以從控件Topics(可能是HiddenField?您沒有指定)繼承它並覆蓋它客戶端Id吸氣返回其服務器ID是這樣的:

http://andreascode.wordpress.com/2009/04/27/tiny-drips-of-aspnet-juice/

,那麼你可以在你的JavaScript文件知道,會在頁面的隱藏字段與ID爲「主題」和使用直接。

根據您的域名/情況,這可能爲您節省大量時間,或者讓您在大時間內陷入困境。

相關問題