簡體   English   中英

AJAX和ASP.net,引用外部文件中的服務器控件

[英]AJAX & ASP.net, Referencing server controls in external file

我在ASP.NET頁面中有一些JavaScript,如下所示:

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

我現在編寫了許多函數,使用了這種語法,我想集中我的JavaScript並將其移動到外部JavaScript文件中。 然而,這會破壞,因為找不到“主題”。

讓它發揮作用的最佳策略是什么? 我假設我應該將控制/控制信息作為參數傳遞給函數,但我似乎無法使語法工作。 有什么建議么?

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

在用戶控制中

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

在其他頁面/控件中

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

編輯 - 您面臨的問題是您需要不存在的Topics.ClientID。 因此,彌合這一差距的唯一真正方法是將其置於一個共同的位置。 如果您真的不想這樣做,可以嘗試通過其他一些標准選擇元素。 如果您使用的是jQuery,則可以使用一類主題標記一個元素,然后使用$(“。Topics”)找到它。

這是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>

這種方法允許我將JS與.aspx頁面分開,並將所有服務器控件依賴項放在一個標記中。

如果您知道每個頁面只有一個名為“Topics”的服務器控件,並且您使用命名約定,則可以從控件主題繼承(可能是HiddenField?您沒有指定)並覆蓋其ClientId getter以返回它的服務器ID如下:

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

然后你可以在你的javascript文件中知道頁面中有一個隱藏字段,其id設置為“Topics”並直接使用它。

根據您的域名/情況,這可能會為您節省大量時間或讓您度過難關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM