2013-07-24 37 views
0

我试图表明取决于我通过我的看法包含Telerik的标签栏用户访问级别/隐藏标签,如下图所示:为什么我必须做页面刷新才能让我的Telerik TabStrip在ASP.Net MVC 4中更新?

@{ Html.Telerik().TabStrip() 
.Name("Main_Tabstrip") 
.Items(tabstrip => 
{ 
    tabstrip.Add() 
     .Visible((int)ViewData["UserLevel"] < 2) 
     .Text("Topic A") 
     .LoadContentFrom("_TopicATab", "TopicA"); 
    tabstrip.Add() 
     .Visible((int)ViewData["UserLevel"] < 2) 
     .Text("Topic B") 
     .LoadContentFrom("_TopicBTab", "TopicB"); 
    tabstrip.Add() 
     .Visible((int)ViewData["UserLevel"] < 2) 
     .Text("Topic C") 
     .LoadContentFrom("_TopicCTab", "TopicC"); 
}) 

然而,当我将其称为后产生的查看操作用户状态的变化,虽然视图看起来更新(我可以逐步浏览并查看UserLevel更改),但Tab的可见性仍然保持在第一次呈现视图时的状态。

如果我随后在浏览器中刷新页面或通过JavaScript调用location.reload(),则Tab可见性可以正常工作。

附加信息: 上述操作调用View()来渲染包含上述视图的整个页面。

虽然我能够通过在JavaScript中执行页面重新加载来解决此问题,但我真的很想知道为什么这是必要的,并希望得到任何建议或解决方案。

+0

从你在哪里调用操作来生成视图,你确定你是在写视图在旧标签栏的地方DOM? (也许是包含tabstrip的'div')。 如果是由我决定,我会用JavaScript隐藏标签,而不是重新加载整个标签条。我急于帮助你,但我只熟悉Kendo(Telerik MVC的继任者),我似乎无法找到Telerik MVC的API文档来帮助你找到解决方案。 –

+0

@ user2420536 - 感谢您的回复。我将这个窗体称为Home/Index操作(返回View()),它调用_Layout.cshtml,然后调用RenderBody()来渲染上面显示的视图。我原本打算根据需要从javascript设置网格的Visible属性,但是,我发现这只在初始状态为true时才起作用。如果不需要,我真的不希望这些标签即时显示。 –

回答

1

(我张贴此作为一个答案,因为它是一个评论太长。)

对不起,我本来应该更具体。我的意思是你从页面的哪个位置调用该操作?

你的操作会返回一些HTML(从视图生成)返回给浏览器和一两件事情恰巧取决于行动是如何被调用:

(1)整个页面被替换(与浏览器可能会根据请求动词改变显示的地址)

(2)页面的一部分,例如div的内容被替换。

要完成(1),您可能会使用致电Html.ActionLink或老式的anchor tag。 但是,我会建议你使用(2),因为它可以提供更好的用户体验,但这很难做到。您可以通过拨打jQuery's ajax method或拨打Ajax.ActionLink拨打阿贾克斯电话。

所以基本上我的反问就是关于你正在使用哪一个。我怀疑是你要求采取行动,但不要在任何地方写回应。你是否可以显示动作和视图的其余部分的代码,或者将其缩小为最小范例以粘贴到此处?

更重要的是你的问题,但我已经环顾一下,你是正确的,显示/隐藏与JavaScript的标签不支持开箱即用。然而,我却发现这两个职位其仍可帮助您 http://www.aspnetwiki.com/page:extending-the-telerik-mvc-client-api http://www.aspnetwiki.com/telerik-mvc:dynamically-add-a-tab-to-the-tabstrip

+0

有关标签是我的'主标签',因为这是一个单页应用程序,我正在生成包含它们的视图作为整个页面更新的一部分。我一直试图通过Ajax调用Home/Index动作来更新整个页面,我认为这与页面刷新完全相同,当它没有时会感到惊讶。感谢链接和想法,他们可能会让我回答。 –

+0

我感到有点失望,我无法帮助你更多。无论如何,祝你好运! –

+0

我想你可能确实有帮助,因为我认为你说得对,当你说这可能是该网页没有更新。不幸的是,我没有保留原始调用代码的记录,所以直到我需要做一些没有我不知道的解决方法的东西。 –

相关问题