отключить событие щелчка радменю для пунктов меню верхнего уровня - PullRequest
2 голосов
/ 12 января 2012

в моем коде,

    MenuList = new Telerik.Web.UI.RadMenuItem();
    MenuChild1 = new Telerik.Web.UI.RadMenuItem();
    MenuList.Text = "Orders";
    MenuList.Value = "Orders";

    RadMenu_Control.Items.Add(MenuList);

    if (genRights.Find(delegate(UserRights u) { return u.RIGHT_NAME == "Group Master"; }) != null`enter code here`)
    {
        CategoryList = new Telerik.Web.UI.RadMenuItem();
        CategoryList.Text = "Purchase Order";
        CategoryList.Value = "order";
        MenuList.Items.Add(CategoryList);
        //MenuChild1 = new Telerik.Web.UI.RadMenuItem();
        //MenuChild1.Text = "PURCHASE ORDER";
        //MenuChild1.Value = "order";
        //MenuList.Items.Add(MenuChild1);
    }
    else
    {

    }

Теперь в этом я хочу отключить клик на "Заказы", а не на "Заказ покупателя", потому что это дочерний элемент.

Ответы [ 3 ]

3 голосов
/ 10 февраля 2012

Сначала вам нужно добавить событие «OnClientItemClicking» в ваше RadMenu.Вот так:

<telerik:RadMenu ID="RadMenu1" runat="server" OnClientItemClicking="DisableRootClick">

А вот тело функции JavaScript DisableRootClick:

function DisableRootClick (sender, args) {
    if (args.get_item().get_items().get_count() != 0 && args.get_item().get_level() == 0) {
            args.get_item().set_selected(false);
            args.get_item().set_focused(false);

            args.set_cancel(true); // Cancel the event
    } 

}

А вот и вы:)

1 голос
/ 02 февраля 2013

Существует более простое решение:

На стороне сервера:

RadMenuItem.PostBack = False

И, конечно, вы можете сделать это декларативным способом в элементе управления, используя

<telerik:RadMenu runat="server" ID="RadMenu1">
    <Items>
        <telerik:RadMenuItem runat="server" Text="RootMenu" PostBack="False" />
    </Items>
</telerik:RadMenu>
0 голосов
/ 21 мая 2012

Это не решает вашу проблему, но я реализую что-то в соответствии с примером из документации: RadMenu Client Side Events Documentation , и это может помочь. Мне нужно отключить случайные дочерние и топовые элементы.

navigateUrl всегда будет поддельным якорем "#", если он не указан. Проблема в том, что он также делает это для событий щелчков, которые я хочу обработать на сервере, плюс мое rad menu выполняет смесь привязок к вложенным файлам сайта и динамически добавляет пункты меню с помощью кода, поэтому сейчас я решил проверить текст пункта меню, сделав следующее:

<script type="text/javascript">

    function mainRadMenu_OnClientItemClicking( sender, eventArgs ) {

        var item = eventArgs.get_item();

        var itemText = item.get_text();

        var textOfMenuItemsToNotBeClicked = ['Tools', 'Links', 'No Links', 'Services', 'Summary Reports', '<%= GetOrganizationsAcronymMenuText %>'];

        var totalMenuItemsToNotBeClicked = textOfMenuItemsToNotBeClicked.length;

        while ( totalMenuItemsToNotBeClicked-- ) {

            if ( itemText.indexOf( textOfMenuItemsToNotBeClicked[totalMenuItemsToNotBeClicked] ) !== -1 ) {

                eventArgs.set_cancel( true );

            }
        }
    }
</script>


      <telerik:RadMenu ID="RadMenu1" runat="server" OnClientItemClicking="onClicking">
      ...
      </telerik:RadMenu>

Я уверен, что есть более элегантное решение, я мог бы по крайней мере переместить строки в файл ресурсов и сослаться на них, но пока это работает ...

...