ASP.NET 2.0 Treeview No Postback?

Discussion in 'ASP .Net' started by Matt MacDonald, Sep 7, 2006.

  1. Hi All,
    I have a form that displays hierarchical categories in a treeview. Ok so
    far so good. What I was to do is have users be able to select a node in the
    treeview as part of filling out the form. I only want to allow single
    selection, so using checkboxes is out of the question. It works as is, but
    it makes the form very cumbersome if every time that a user selects a node,
    the whole page has to reload. Is there a way to have a node become selected
    without using postback? I tried setting the navigateurl of all the nodes to
    "javascript:void(0);" as was suggested in one post. This works, however, if
    a node is currently selected in the tree via server side code, this doesn't
    de-select that node. This also doesn't work very well in non-IE browsers.
    I also started to experiment using ICallbackEventHandler to use server side
    functions without reposting, but that doesn't seem to work in this scenario
    (I don't think). Does anyone have any way of getting around this? I really
    wish the autopostback property had been built into the treeview like in
    other serverside data controls.

    Thanks in advance for any help,
    Matt
     
    Matt MacDonald, Sep 7, 2006
    #1
    1. Advertising

  2. Matt MacDonald

    Teemu Keiski Guest

    Simple way is just to use Atlas. E,g put the TreeView in a UpdatePanel.

    --
    Teemu Keiski
    ASP.NET MVP, AspInsider
    Finland, EU
    http://blogs.aspadvice.com/joteke




    "Matt MacDonald" <> wrote in message
    news:%...
    > Hi All,
    > I have a form that displays hierarchical categories in a treeview. Ok so
    > far so good. What I was to do is have users be able to select a node in
    > the treeview as part of filling out the form. I only want to allow single
    > selection, so using checkboxes is out of the question. It works as is,
    > but it makes the form very cumbersome if every time that a user selects a
    > node, the whole page has to reload. Is there a way to have a node become
    > selected without using postback? I tried setting the navigateurl of all
    > the nodes to "javascript:void(0);" as was suggested in one post. This
    > works, however, if a node is currently selected in the tree via server
    > side code, this doesn't de-select that node. This also doesn't work very
    > well in non-IE browsers. I also started to experiment using
    > ICallbackEventHandler to use server side functions without reposting, but
    > that doesn't seem to work in this scenario (I don't think). Does anyone
    > have any way of getting around this? I really wish the autopostback
    > property had been built into the treeview like in other serverside data
    > controls.
    >
    > Thanks in advance for any help,
    > Matt
    >
     
    Teemu Keiski, Sep 7, 2006
    #2
    1. Advertising

  3. Can you please explain further? I'm not familiar with Atlas.

    Thanks,
    Matt

    "Teemu Keiski" <> wrote in message
    news:...
    > Simple way is just to use Atlas. E,g put the TreeView in a UpdatePanel.
    >
    > --
    > Teemu Keiski
    > ASP.NET MVP, AspInsider
    > Finland, EU
    > http://blogs.aspadvice.com/joteke
    >
    >
    >
    >
    > "Matt MacDonald" <> wrote in message
    > news:%...
    >> Hi All,
    >> I have a form that displays hierarchical categories in a treeview. Ok
    >> so far so good. What I was to do is have users be able to select a node
    >> in the treeview as part of filling out the form. I only want to allow
    >> single selection, so using checkboxes is out of the question. It works
    >> as is, but it makes the form very cumbersome if every time that a user
    >> selects a node, the whole page has to reload. Is there a way to have a
    >> node become selected without using postback? I tried setting the
    >> navigateurl of all the nodes to "javascript:void(0);" as was suggested in
    >> one post. This works, however, if a node is currently selected in the
    >> tree via server side code, this doesn't de-select that node. This also
    >> doesn't work very well in non-IE browsers. I also started to experiment
    >> using ICallbackEventHandler to use server side functions without
    >> reposting, but that doesn't seem to work in this scenario (I don't
    >> think). Does anyone have any way of getting around this? I really wish
    >> the autopostback property had been built into the treeview like in other
    >> serverside data controls.
    >>
    >> Thanks in advance for any help,
    >> Matt
    >>

    >
    >
     
    Matt MacDonald, Sep 8, 2006
    #3
  4. Matt MacDonald

    Teemu Keiski Guest

    It is Microsoft's implementation of AJAX: See http://atlas.asp.net

    With it you can make page work without visible postbacks while still keeping
    the server-side functionality.

    --
    Teemu Keiski
    ASP.NET MVP, AspInsider
    Finland, EU
    http://blogs.aspadvice.com/joteke


    "Matt MacDonald" <> wrote in message
    news:%...
    > Can you please explain further? I'm not familiar with Atlas.
    >
    > Thanks,
    > Matt
    >
    > "Teemu Keiski" <> wrote in message
    > news:...
    >> Simple way is just to use Atlas. E,g put the TreeView in a UpdatePanel.
    >>
    >> --
    >> Teemu Keiski
    >> ASP.NET MVP, AspInsider
    >> Finland, EU
    >> http://blogs.aspadvice.com/joteke
    >>
    >>
    >>
    >>
    >> "Matt MacDonald" <> wrote in message
    >> news:%...
    >>> Hi All,
    >>> I have a form that displays hierarchical categories in a treeview. Ok
    >>> so far so good. What I was to do is have users be able to select a node
    >>> in the treeview as part of filling out the form. I only want to allow
    >>> single selection, so using checkboxes is out of the question. It works
    >>> as is, but it makes the form very cumbersome if every time that a user
    >>> selects a node, the whole page has to reload. Is there a way to have a
    >>> node become selected without using postback? I tried setting the
    >>> navigateurl of all the nodes to "javascript:void(0);" as was suggested
    >>> in one post. This works, however, if a node is currently selected in
    >>> the tree via server side code, this doesn't de-select that node. This
    >>> also doesn't work very well in non-IE browsers. I also started to
    >>> experiment using ICallbackEventHandler to use server side functions
    >>> without reposting, but that doesn't seem to work in this scenario (I
    >>> don't think). Does anyone have any way of getting around this? I
    >>> really wish the autopostback property had been built into the treeview
    >>> like in other serverside data controls.
    >>>
    >>> Thanks in advance for any help,
    >>> Matt
    >>>

    >>
    >>

    >
    >
     
    Teemu Keiski, Sep 9, 2006
    #4
  5. Does anybody have any more information about this?

    Thanks,
    Matt

    "Matt MacDonald" <> wrote in message
    news:%...
    > Can you please explain further? I'm not familiar with Atlas.
    >
    > Thanks,
    > Matt
    >
    > "Teemu Keiski" <> wrote in message
    > news:...
    >> Simple way is just to use Atlas. E,g put the TreeView in a UpdatePanel.
    >>
    >> --
    >> Teemu Keiski
    >> ASP.NET MVP, AspInsider
    >> Finland, EU
    >> http://blogs.aspadvice.com/joteke
    >>
    >>
    >>
    >>
    >> "Matt MacDonald" <> wrote in message
    >> news:%...
    >>> Hi All,
    >>> I have a form that displays hierarchical categories in a treeview. Ok
    >>> so far so good. What I was to do is have users be able to select a node
    >>> in the treeview as part of filling out the form. I only want to allow
    >>> single selection, so using checkboxes is out of the question. It works
    >>> as is, but it makes the form very cumbersome if every time that a user
    >>> selects a node, the whole page has to reload. Is there a way to have a
    >>> node become selected without using postback? I tried setting the
    >>> navigateurl of all the nodes to "javascript:void(0);" as was suggested
    >>> in one post. This works, however, if a node is currently selected in
    >>> the tree via server side code, this doesn't de-select that node. This
    >>> also doesn't work very well in non-IE browsers. I also started to
    >>> experiment using ICallbackEventHandler to use server side functions
    >>> without reposting, but that doesn't seem to work in this scenario (I
    >>> don't think). Does anyone have any way of getting around this? I
    >>> really wish the autopostback property had been built into the treeview
    >>> like in other serverside data controls.
    >>>
    >>> Thanks in advance for any help,
    >>> Matt
    >>>

    >>
    >>

    >
    >
     
    Matt MacDonald, Sep 14, 2006
    #5
  6. Matt MacDonald

    Roland Dick Guest

    Hi Matt,

    ATLAS is the MS flavour of AJAX, asynchronous javascript and XML. It's a
    framework that integrates into VS2005. You can get it from atlas.asp.net.

    As for the updatepanel, the good news is that you'll only need a few
    lines around the tree to achieve partial updating of the page. Have a
    look at
    http://atlas.asp.net/docs/atlas/doc/controls/default.aspx#updatepanel
    which shows how to use the updatepanel.

    Hope this helps,

    Regards,

    Roland



    Matt MacDonald schrieb:
    > Does anybody have any more information about this?


    >>> Simple way is just to use Atlas. E,g put the TreeView in a UpdatePanel.
     
    Roland Dick, Sep 14, 2006
    #6
  7. re:
    > ATLAS is the MS flavour of AJAX


    Not for long...

    http://weblogs.asp.net/scottgu/archive/2006/09/11/_2200_Atlas_2200_-1.0-Naming-and-Roadmap.aspx


    "As part of releasing "Atlas", we have also finally locked on an
    official set of product names that we will begin using moving forward.

    What was formerly called "Atlas" will now have a few names:

    1) The client-side "Atlas" javascript library is going to be called the Microsoft AJAX Library.

    2) The server-side "Atlas" functionality that nicely integrates
    with ASP.NET will be called the ASP.NET 2.0 AJAX Extensions.

    As part of this change the tag prefix for the "Atlas"
    controls will change from <atlas:>to <asp:>.

    3) The "Atlas" Control Toolkit today is a set of free, shared source controls and
    components that help you get the most value from the ASP.NET AJAX Extensions.

    Going forward, the name of the project will change
    to be the ASP.NET AJAX Control Toolkit.




    Juan T. Llibre, asp.net MVP
    aspnetfaq.com : http://www.aspnetfaq.com/
    asp.net faq : http://asp.net.do/faq/
    foros de asp.net, en espaƱol : http://asp.net.do/foros/
    ===================================

    "Roland Dick" <> wrote in message news:...
    > Hi Matt,
    >
    > ATLAS is the MS flavour of AJAX, asynchronous javascript and XML. It's a framework that integrates
    > into VS2005. You can get it from atlas.asp.net.
    >
    > As for the updatepanel, the good news is that you'll only need a few lines around the tree to
    > achieve partial updating of the page. Have a look at
    > http://atlas.asp.net/docs/atlas/doc/controls/default.aspx#updatepanel
    > which shows how to use the updatepanel.
    >
    > Hope this helps,
    >
    > Regards,
    >
    > Roland
    >
    >
    >
    > Matt MacDonald schrieb:
    >> Does anybody have any more information about this?

    >
    >>>> Simple way is just to use Atlas. E,g put the TreeView in a UpdatePanel.
     
    Juan T. Llibre, Sep 15, 2006
    #7
  8. I am having the same issue, and the responses to this question seem to be
    missing the point entirely. I've seen this question in a few places on the
    web, and their answers also seem to miss the point. I'm starting to wonder
    if I'm crazy, although I can see that others are having the same problem I am.

    In my case, I have a hierarchy of facilities that I need to manage. I have
    a TreeView on the left side of the page showing the hierarchy, and three
    buttons to the right: "Add," "Edit," and "Delete." The user first selects a
    site in the TreeView, then clicks one of the three buttons to the right to
    indicate what they want to do with the site. Only after that button click do
    I want a PostBack to the server.

    This actually works properly using the pre-.NET2.0 TreeView (i.e., the
    Microsoft IE WebControls TreeView control).

    With the .NET 2.0 TreeView, I can't for the life of me figure out how to
    select a node (i.e., have its style change to SelectedNodeStyle, and its ID
    recorded as the SelectedNode client-side) without an immediate PostBack.

    It's as if the TreeView engineers never fathomed that someone would want to
    do *anything* besides (a) immediately PostBack, or (b) immediately navigate
    away from the page, when a user selects a node in the TreeView. I know this
    can't be right. (And this is oversimplified -- by setting
    <node>.SelectAction = TreeNodeSelectAction.Expand or .None, I can get
    client-based behavior -- but not the behavior I want.)

    Investigating this problem, I decided to take a peek inside the TreeView
    JavaScript library and see what's going on there. I did a View Source and
    found a couple of "<script src=" statements, and the second one turned out to
    be the one emitted for TreeView pages... so I plugged that URL directly into
    my Address bar and saved the .js file to my desktop.

    Inside this file, among other things, appears a definition for:
    "TreeView_SelectNode(data, node, nodeId)". This function is actually called
    from within my .aspx page. The problem is that, while I can see the emitted
    JavaScript for the call
    [TreeView_SelectNode(ctl00_Content_ctl00_tvOutages_Data,
    this,'ctl00_Content_ctl00_tvOutagest5');], I have no idea how to write C#
    code on the server that will emit the proper parameters for each individual
    TreeNode. (In case you're wondering, I have a MasterPage, and this call
    occurs from within a ContentPlaceHolder called "Content".)

    The TreeView_SelectNode function does three things: (1) un-applies the
    "selected" style from the currently-selected node, if any; (2) applies the
    "selected" style to the newly-selected node, and (3) records the ID of the
    newly-selected node in a JavaScript structure intended to track TreeView
    state on the client (passed into the function as the "data" parameter).

    I don't want to write an entire parallel JavaScript function for selecting
    nodes when I know that there's one built into the TreeView's JavaScript
    library. Does anyone know how this library works well enough to help write
    the appropriate calls to do client-side node selection? Or is there a better
    way to do this that I'm just missing?

    Thanks,

    -Bryan



    "Matt MacDonald" wrote:

    > Hi All,
    > I have a form that displays hierarchical categories in a treeview. Ok so
    > far so good. What I was to do is have users be able to select a node in the
    > treeview as part of filling out the form. I only want to allow single
    > selection, so using checkboxes is out of the question. It works as is, but
    > it makes the form very cumbersome if every time that a user selects a node,
    > the whole page has to reload. Is there a way to have a node become selected
    > without using postback? I tried setting the navigateurl of all the nodes to
    > "javascript:void(0);" as was suggested in one post. This works, however, if
    > a node is currently selected in the tree via server side code, this doesn't
    > de-select that node. This also doesn't work very well in non-IE browsers.
    > I also started to experiment using ICallbackEventHandler to use server side
    > functions without reposting, but that doesn't seem to work in this scenario
    > (I don't think). Does anyone have any way of getting around this? I really
    > wish the autopostback property had been built into the treeview like in
    > other serverside data controls.
    >
    > Thanks in advance for any help,
    > Matt
    >
    >
    >
     
    =?Utf-8?B?QnJ5YW4gT3dlbg==?=, Oct 27, 2006
    #8
  9. Matt MacDonald

    Guest

    The only way i have found to remove hyperlink in a TreeView is to
    iterate the TreeNodeCollection recusively and set the SelectAction to
    TreeNodeSelectAction.None

    Here's an example:

    //recursive method
    internal TreeView RemoveHyperLinks(TreeView treeView,
    TreeNodeCollection treeNodes)
    {
    foreach (TreeNode node in treeNodes)
    {
    node.SelectAction = TreeNodeSelectAction.None;//here
    the link is removed
    if (node.ChildNodes != null && node.ChildNodes.Count >
    0)
    {
    treeView = RemoveHyperLinks(treeView,
    node.ChildNodes);
    }
    }
    return treeView;
    }

    //initial call:
    _treeView = RemoveHyperLinks(_treeView, _treeView.Nodes);


    Let me know if this works for you

    thx
    //AndersR
     
    , Nov 30, 2006
    #9
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. =?Utf-8?B?VHltYm93?=
    Replies:
    2
    Views:
    24,479
    =?Utf-8?B?VHltYm93?=
    Jan 10, 2006
  2. Anders
    Replies:
    0
    Views:
    865
    Anders
    Apr 27, 2006
  3. Dave
    Replies:
    0
    Views:
    482
  4. japi
    Replies:
    2
    Views:
    7,175
    jinksk
    Aug 26, 2007
  5. rockdale
    Replies:
    2
    Views:
    3,365
Loading...

Share This Page