将图像仅添加到树视图中的一个节点

时间:2017-06-15 19:34:24

标签: asp.net-mvc-5 telerik treeview telerik-mvc

我目前正在为客户请求修改树视图控件(Telerik MVC Extensions)。他们的请求很简单:如果树中的项目有附件,请在节点旁边添加一个回形针以识别它。

到目前为止,我已经能够这样做但是,发现了一个小小的打嗝。我可以将图像添加到具有附件的某些节点,但是,所有不应该没有图像的节点(我认为它们应该在树中显得正常)。相反,我发现树上放置了回形针图像大小的空白。

有没有办法动态关闭此空白(如果不需要也不添加图像URL)?下面是我执行此过程的代码(由于只有底层显示了附件,因此在树的扩展方法上完成)。

导航控制器

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult GetNextTreeViewLevel(TreeViewItem node)
{
    ...
    //If bottom layer, then execute the following
    var data = _TreeRepo.GetProcessesByParcel(int.Parse(values[1]), cntTreeList);
    nodes = from item in data
              select new TreeViewItem
              {
                 Text = item.strProcess,
                 Value = "PR" + "," + item.cntProcess.ToString(),
                 LoadOnDemand = false,
                 Enabled = true,
                 Selected = SelectedSearchResult.ToString().Length > 0
                                        && SelectedSearchResult.ToString().Split('~').Length > 3
                                        && decimal.Parse(SelectedSearchResult.ToString()
                                            .Split('~')
                                            .Last()
                                            .Substring(2)) == item.cntProcess
                 ImageUrl = item.ysnHasAttachment.HasValue && item.ysnHasAttachment.Value == 1
                              ? @"/Content/NewImages/attachment.png"
                              : string.Empty
              };
    return new JsonResult { Data = nodes };
}

没有/带有Image Url代码的屏幕截图:

enter image description here enter image description here

1 个答案:

答案 0 :(得分:0)

我终于找到了解决这个问题的方法。问题是我如何将我的数据添加到节点。原始逻辑是在获取数据以获取IEnumerable对象后执行Linq查询。

因此,每个节点都在尝试添加图像(即使没有图像)。因此奇怪的空间。下面是我重写这个逻辑以正确获取数据的方法。

var processNodes = new List<TreeViewItem>();
var data = _TreeRepo.GetProcessesByParcel(int.Parse(values[1]), cntTreeList);

foreach (var item in data)
{
    #region Process has at least one Attachment
    if (item.ysnHasAttachment.HasValue && item.ysnHasAttachment.Value == 1)
        processNodes.Add(new TreeViewItem
        {
           Text = item.strProcess,
           Value = "PR" + "," + item.cntProcess.ToString(),
           LoadOnDemand = false,
           Enabled = true,
           Selected = SelectedSearchResult.ToString().Length > 0
                        && SelectedSearchResult.ToString().Split('~').Length > 3
                        && decimal.Parse(SelectedSearchResult.ToString()
                        .Split('~')
                        .Last()
                        .Substring(2)) == item.cntProcess,
           ImageUrl = "/Content/NewImages/smallAttachment.png"
        });
    #endregion
    #region Process has no Attachments
    else
        processNodes.Add(new TreeViewItem
        {
           Text = item.strProcess,
           Value = "PR" + "," + item.cntProcess.ToString(),
           LoadOnDemand = false,
           Enabled = true,
           Selected = SelectedSearchResult.ToString().Length > 0
                        && SelectedSearchResult.ToString().Split('~').Length > 3
                        && decimal.Parse(SelectedSearchResult.ToString()
                        .Split('~')
                        .Last()
                        .Substring(2)) == item.cntProcess
        }
   #endregion
}
nodes = processNodes;

此时,您现在可以返回节点。应该有附件图标的那些,以及那些不应该获胜的人。有趣的是,4个月后,你可以拿出袖口上的东西。