This is a migrated thread and some comments may be shown as answers.

[Solved] Testing for parent node not working in IE

3 Answers 80 Views
TreeView
This is a migrated thread and some comments may be shown as answers.
This question is locked. New answers and comments are not allowed.
Donna Stewart
Top achievements
Rank 1
Donna Stewart asked on 23 Dec 2011, 07:36 PM
I have a strange issue - testing to see if a node has a parent is not working in IE.  This similar code works fine in other views in IE and this specific treeview and code works fine in FireFox, but not in IE.  Here is the javascript:
function getAddWebItemsPart2() {
    var userGroupsTree = $("#existingUserGroups");
    var webitemstreeview = $('#WebItemsToAddTree').data('tTreeView');
    var webitems = [];
    var checkedNodes = $('#WebItemsToAddTree :checked').closest('.t-item');
    if (checkedNodes.length > 0) {
        $('#WebItemsToAddTree :checked').closest('.t-item')
            .each(function (index, node) { // first arg: index, second arg: node
                parent = $(node).parent().closest('.t-item');
                alert("parent is " + webitemstreeview.getItemValue(parent));
                if (parent.length > 0) {
                    webitems.push(webitemstreeview.getItemValue(node));
                }
            });
        if (webitems.length > 0) {
            alert(webitems.length + "webitems");
            $.cookie("taskKeys", webitems);
            $.post('<%= Url.Action("GetUserGroups", "User")%>', { 'userKey': '<%: Model.userKey %>' },
                function (result) {
                    if (result.length > 0) {
                        userGroupsTree.data('tTreeView').bindTo(result);
                    }
                    else {
                        userGroupsTree.data('tTreeView').bindTo({ Text: "No user groups" });
                    }
                },
                "json"
            );
        }
    }
    else {
        $("#AddWebItems3ErrorField").replaceWith('<div id="AddWebItems3ErrorField" class="display-field" style="color:#FF3366; font-size:small;">Please select at least one web item to add for the user.</div>');
    }
}
Here's the treeview (note that is it nested in a tabstrip):
<% Html.Telerik().TabStrip.Name("WebItemsTabStrip").Items(Function(tabitem) tabitem.Add().Text("Choose Web Items").Selected(True).ContentHtmlAttributes(New With {.style = "height:630px;"}) _
         .Content(Sub()%>
        <div style="padding:10px;">
            <span class="listbox-label">Web Items</span><br />
            <span class="editor-label">Choose web item(s) to add</span><br />
            <% Html.Telerik().TreeView().Name("WebItemsToAddTree").ShowCheckBox(True).HtmlAttributes(New With {.style = "font-size:1em; height:500px; width:350px"}) _
                   .ClientEvents(Function(evt) evt.OnChecked("onChecked")) _
                                            .BindTo(CType(Model.webItemsToAdd, IEnumerable(Of TreeViewItem)),
                                            Sub(mappings)
                                                mappings.For(Of TreeViewItem)(
                                                Sub(binding)
                                                    binding _
                                                        .ItemDataBound(
                                                            Sub(item, webitem)
                                                                item.Text = webitem.Text
                                                                item.Value = webitem.Value
                                                                item.Encoded = False
                                                                item.Expanded = True
                                                            End Sub).Children(Function(webitem) webitem.Items)
                                                End Sub)
                                                mappings.For(Of TreeViewItem)(
                                                    Sub(binding)
                                                        binding.ItemDataBound(
                                                            Sub(item, childwebitem)
                                                                item.Text = childwebitem.Text
                                                                item.Value = childwebitem.Value
                                                                item.Encoded = False
                                                            End Sub).Children(Function(childwebitem) childwebitem.Items)
                                                    End Sub)
                                                mappings.For(Of TreeViewItem)(
                                                    Sub(binding)
                                                        binding.ItemDataBound(
                                                            Sub(item, grandchilditem)
                                                                item.Text = grandchilditem.Text
                                                                item.Value = grandchilditem.Value
                                                                item.Encoded = False
                                                            End Sub)
                                                    End Sub)
                                            End Sub).Render()%>
            <div style="float:none; clear:both; text-align:center">
                <div class="table_menu">
                    <br />
                    <ul class="left">
                        <li><a href="#" id="continueBtn" class="button add_new"><span><span>Continue</span></span></a></li>
                        <li><a href="#" id="cancelBtn" class="button add_new"><span><span>Cancel</span></span></a></li>
                    </ul>
                    <br />
                    <div></div>
                    <div id = "AddWebItemsErrorField"></div>
                </div>
            </div>           
        </div>
        <% End Sub)) _

Here's the controller code:
Function GetWebItemsToAdd(ByVal userKey As Integer) As ActionResult
    Dim gmcPermissions As New GMCPermissions
    Dim addWebItemsModel As New List(Of TreeViewItem)
    Dim webItemsReturned As New List(Of GMCListItem)
    Dim DLReports As New List(Of CustomerReport)
    Dim statusReturn As New StatusReturn
    Dim webItemObj As New WebTask
    Dim parentNode As New TreeViewItem
    Dim childNode As TreeViewItem
    Dim grandChildNode As TreeViewItem
    Dim model As New AddWebItemsToUserModel
    model.userKey = userKey
    model.webItemsToAdd = New List(Of TreeViewItem)
    statusReturn = gmcPermissions.GetWebInfoForUser(userKey, webItemsReturned, True)
    If webItemsReturned.Count > 0 Then
        Dim initialReportType As String = webItemsReturned.Item(0).value
        parentNode.Text = initialReportType
        parentNode.Value = initialReportType
        For Each webItem In webItemsReturned
            webItemObj = webItem.dataObject
            If webItem.value.Equals(initialReportType) Then
                childNode = New TreeViewItem
                childNode.Value = webItemObj.TaskKey
                childNode.Text = webItemObj.TaskText
                If webItemObj.TaskTab.Equals("DL") Then
                    If Session("companyListType").Equals("carrier") Then
                        childNode.Text = webItemObj.TaskText + " - " + webItemObj.TaskCollectionLabel
                    Else
                        childNode.Text = webItemObj.TaskText
                    End If
                    statusReturn = gmcPermissions.GetReportsForTaskAndUser(webItemObj.TaskKey, userKey, DLReports, True)
                    If statusReturn.StatusCode.Equals(com.gmcps.StatusReturn.StatusCodes.SUCCESS) And DLReports.Count > 0 Then
                        For Each rpt In DLReports
                            grandChildNode = New TreeViewItem
                            grandChildNode.Text = rpt.FileName
                            grandChildNode.Value = rpt.ReportKey
                            childNode.Items.Add(grandChildNode)
                        Next
                    End If
                End If
                parentNode.Items.Add(childNode)
            Else
                addWebItemsModel.Add(parentNode)
                initialReportType = webItem.value
                parentNode = New TreeViewItem
                parentNode.Text = webItem.value
                parentNode.Value = webItem.value
                childNode = New TreeViewItem
                childNode.Value = webItemObj.TaskKey
                childNode.Text = webItemObj.TaskText
                If webItemObj.TaskTab.Equals("DL") Then
                    If Session("companyListType").Equals("carrier") Then
                        childNode.Text = webItemObj.TaskText + " - " + webItemObj.TaskCollectionLabel
                    Else
                        childNode.Text = webItemObj.TaskText
                    End If
                    statusReturn = gmcPermissions.GetReportsForTaskAndUser(webItemObj.TaskKey, userKey, DLReports, True)
                    If statusReturn.StatusCode.Equals(com.gmcps.StatusReturn.StatusCodes.SUCCESS) And DLReports.Count > 0 Then
                        For Each rpt In DLReports
                            grandChildNode = New TreeViewItem
                            grandChildNode.Text = rpt.FileName
                            grandChildNode.Value = rpt.ReportKey
                            childNode.Items.Add(grandChildNode)
                        Next
                    End If
                End If
                parentNode.Items.Add(childNode)
            End If
        Next
        addWebItemsModel.Add(parentNode)
    End If
    model.webItemsToAdd = addWebItemsModel
    Return PartialView("AddWebItems", model)
End Function

Any help is very much appreciated!
Donna

3 Answers, 1 is accepted

Sort by
0
Accepted
Atanas Korchev
Telerik team
answered on 26 Dec 2011, 09:43 AM
Hi,

We couldn't reproduce this problem in the attached sample project. It works in all tested browsers. Could you modify it so it mimics your own project?

Greetings,
Atanas Korchev
the Telerik team
If you want to get updates on new releases, tips and tricks and sneak peeks at our product labs directly from the developers working on the Telerik Extensions for ASP.MET MVC, subscribe to their blog feed now
0
Donna Stewart
Top achievements
Rank 1
answered on 28 Dec 2011, 06:25 PM
I have modified the application you provided to mimic the issue I am seeing.  I am using version 2011.2.914.340 of the MVC Extensions.  When you check all the nodes and click the continue button, it should show an alert for each child node.  I added an alert to show the parent text for each node and as you will see, no text is printed, so it is not finding the text for the parent.  I have been using the same javascript to get the parent node for months.  This is the code I was given by Telerik support.  Has something changed?   I noticed there is a newer version and I am downloading it now and will try it and let you know if it works.  In the meantime, here is the app which mimics the issue.  Thank you again for your help!

Donna
0
Donna Stewart
Top achievements
Rank 1
answered on 28 Dec 2011, 06:37 PM
Well, I figured out the issue.  I am a nitwit!  I hadn't declared the parent javascript variable.  I am terribly sorry for wasting your time.  Thank you again for all of your help!

            var parent;
.
.
.
.
                        parent = $(node).parent().closest('.t-item');

Donna
Tags
TreeView
Asked by
Donna Stewart
Top achievements
Rank 1
Answers by
Atanas Korchev
Telerik team
Donna Stewart
Top achievements
Rank 1
Share this question
or