我试图表明取决于我通过我的看法包含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中执行页面重新加载来解决此问题,但我真的很想知道为什么这是必要的,并希望得到任何建议或解决方案。
从你在哪里调用操作来生成视图,你确定你是在写视图在旧标签栏的地方DOM? (也许是包含tabstrip的'div')。 如果是由我决定,我会用JavaScript隐藏标签,而不是重新加载整个标签条。我急于帮助你,但我只熟悉Kendo(Telerik MVC的继任者),我似乎无法找到Telerik MVC的API文档来帮助你找到解决方案。 –
@ user2420536 - 感谢您的回复。我将这个窗体称为Home/Index操作(返回View()),它调用_Layout.cshtml,然后调用RenderBody()来渲染上面显示的视图。我原本打算根据需要从javascript设置网格的Visible属性,但是,我发现这只在初始状态为true时才起作用。如果不需要,我真的不希望这些标签即时显示。 –