0

我正在尝试根据传递给包含 Telerik tabStrip 的视图的用户访问级别来显示/隐藏选项卡,如下所示:

@{  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 更改),但选项卡的可见性仍然与第一次呈现视图时一样.

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

附加信息:上面提到的 Action 调用 View() 来渲染包含上述 View 的整个页面。

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

4

1 回答 1

1

(我将其发布为答案,因为评论太长了。)

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

您的操作会返回一些返回给浏览器的 html(从视图生成),并且会根据调用操作的方式发生以下两种情况之一:

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

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

要完成 (1),您可能会使用调用Html.ActionLink或老式的锚标签。但是,我建议您改用 (2),因为它可以提供更好的 UX,但更难做到。您可以通过jQuery 的 ajax 方法或调用来进行 AjaxAjax.ActionLink调用。

所以基本上我的反问是关于你使用的是哪一个。我怀疑您是在请求采取行动,但没有在任何地方写下回复。您能否显示该操作和视图其余部分的代码,或者将其简化为一个最小示例以粘贴到此处?

不过,更重要的是,我环顾四周,您说得对,开箱即用不支持使用 javascript 显示/隐藏选项卡。但是,我确实找到了这两个帖子,它们可能仍然对您有所帮助 http://www.aspnetwiki.com/page:extending-the-telerik-mvc-client-api http://www.aspnetwiki.com/telerik-mvc:dynamically -将标签添加到标签条

于 2013-07-29T20:04:44.543 回答