【问题标题】:Why do I have to do a page refresh to get my Telerik TabStrip to update in ASP.Net MVC 4?为什么我必须刷新页面才能让 Telerik TabStrip 在 ASP.Net MVC 4 中更新?
【发布时间】:2013-07-24 10:06:09
【问题描述】:

我正在尝试根据我传递给包含 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 中重新加载页面来解决这个问题,但我真的很想知道为什么这是必要的,并且希望得到任何建议或解决方案。

【问题讨论】:

  • 您从哪里调用该操作来生成视图,并且您确定您正在编写视图来代替 DOM 中的旧标签条? (也许是包含标签条的div?)。如果由我决定,我会用 javascript 隐藏标签,而不是重新加载整个标签条。我很想帮助你,但我只熟悉 Kendo(Telerik MVC 的继任者),我似乎无法找到 Telerik MVC 的 API 文档来帮助找到解决方案。
  • @user2420536 - 感谢您的回复。我将此表单称为我的 Home/Index 操作(返回 View()),它调用 _Layout.cshtml,后者又调用 RenderBody() 来呈现上面显示的视图。我最初打算根据需要从 javascript 设置 Grid 的 Visible 属性,但是,我发现这只有在初始状态为真时才有效。如果不需要的话,我真的不希望这些选项卡暂时出现。

标签: asp.net asp.net-mvc asp.net-mvc-4 telerik telerik-mvc


【解决方案1】:

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

抱歉,我应该更具体一些。我的意思是您从页面的哪个位置调用操作?

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

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

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

要完成 (1),您可能会调用 Html.ActionLink 或老式的 anchor tag。 但是,我建议您改用 (2),因为它可以提供更好的 UX,但更难做到。您可以通过jQuery's ajax methodAjax.ActionLink 调用进行Ajax 调用。

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

尽管您的问题更重要,但我环顾四周,您说得对,开箱即用不支持使用 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

【讨论】:

  • 相关标签是我的“主标签”,因为这是一个单页应用程序,我正在生成包含它们作为整个页面更新的一部分的视图。我一直在尝试通过对 Home/Index 操作的 Ajax 调用来更新整个页面,我认为这与进行页面刷新是一样的,但当它没有刷新时我感到很惊讶。感谢您的链接和想法,它们可能会引导我找到答案。
  • 我对无法为您提供更多帮助感到有点失望。无论如何,祝你好运!
  • 我认为您可能确实提供了帮助,因为我怀疑您说的没错,可能是页面没有更新。不幸的是,我没有记录原始调用代码,所以在我需要做类似的事情之前我不会找到解决方法。
猜你喜欢
  • 1970-01-01
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 2013-10-03
  • 2022-11-23
  • 1970-01-01
相关资源
最近更新 更多