2015-02-06 64 views
0

我有一個用戶控件(MyListSelect.ascx),僅僅有一個單選按鈕列表中找到的JavaScript ...ASCX結果來調用ASPX

<%@ Control Language="C#" %> 
<select> 
    <option disabled selected>Select Options</option> 
    <option> 
     option 1 
    </option> 
    <option> 
     option 2 
    </option> 
</select> 

我的ASPX頁面:

<%@Register Src="~/MylistSelect.ascx" 
      TagName="listSelect" 
      TagPrefix="ListControl" %> 

<ListControl:listSelect runat="server" /> 

這在我的ASPX中顯示一個下拉菜單(woo hoo);

我希望能夠(形成ASPX)根據選定的索引更改事件調用javascript函數,因爲所選的菜單項在不同頁面中具有不同的功能。我不想'在ASCX中定義所有可能的功能。

有什麼建議嗎? lso,爲什麼<ListControl:listSelect runat="server" />必須runat服務器?有沒有辦法解決這個問題呢?

回答

1

首先,改變你的選擇是:

<select onchange="yourJSFunction();"> 

當您使用頁面內部的控制也將提供yourJSFunction

<script type="text/javascript"> 
    function yourJSFunction() { 
     alert("yourJSFunction 1"); 
    } 
</script> 

<ListControl:listSelect runat="server" /> 

在另一頁:

<script type="text/javascript"> 
    function yourJSFunction() { 
     alert("yourJSFunction 2"); 
    } 
</script> 

<ListControl:listSelect runat="server" /> 
+0

我用這種方法完全不同意。當您將此控件放在沒有定義函數的頁面上時會發生什麼? Javascript錯誤。 – moarboilerplate 2015-02-06 20:11:35

3

它必須是runat=server,因爲用戶控件是由t處理的特殊控件他在服務器端的.net引擎。 ASP.NET用戶控件在客戶端沒有任何意義,它在發送到客戶端之前需要「翻譯」。

爲了首先響應選定的索引更改事件,您需要爲select分配一個id或css類,以便您可以通過jQuery選擇器更加準確地識別它(假設您希望自添加jQuery以來使用jQuery它來質詢標籤)。

像這樣的東西應該做的伎倆

HTML

<select id="mySelect"> 
    <option disabled selected>Select Options</option> 
    <option> 
     option 1 
    </option> 
    <option> 
     option 2 
    </option> 
</select> 

JAVASCRIPT

// Shorthand for $(document).ready() 
$(function() { 
    $('#mySelect').change(function(){ 
     // your logic when index changed here 
    }); 
}); 
+0

這個答案是要走的路。該頁面可以知道控件的內容,因爲它正在實例化控件,但是避免在控件中放置任何代碼來對它實例化的頁面進行假設。這是未來頭痛的祕訣。 – moarboilerplate 2015-02-06 20:18:23