2015-02-06 2 views
0

У меня есть пользовательский элемент управления (MyListSelect.ascx), который просто имеет список радио-кнопки ...результата ASCX вызвать JavaScript найденного в 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

3

Это должно быть runat=server, поскольку элементы управления пользователя - это специальные элементы управления, обработанные t он .net движок на стороне сервера. Пользовательский элемент управления ASP.NET не имеет никакого смысла на стороне клиента, ему нужен «перевод» перед отправкой клиенту.

Чтобы ответить на выбранное событие смены индекса, вам нужно назначить id или класс css для select, чтобы вы могли более точно определить его через селектор 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

Смежные вопросы