忽略@RenderBody()

时间:2016-02-17 11:00:36

标签: javascript jquery asp.net

我不确定我是否正确接近这个。

我有一个asp.net mvc网络应用程序。 有4个主要'页面' 通过单击菜单选项,选择了一个页面,并将该页面选择存储在本地存储中。

现在,如果我进行页面刷新,我已经编写了一个简单的JS脚本来维护当前查看的页面。

但是,我注意到@RenderBody()在我的JS脚本之前被称为1st,因此在显示所选页面之前,Home页面会非常短暂地出现。

所以,在sudo代码中我想要这个:

<div id="mainContent" style="height:423px; ">
    if (pageselected!='HOME')
    {
         //call my JS script to load a partial view
    }
    else
    {
        //else load home page
        @RenderBody()
    }
</div>

我的方法是否正确?如何以我描述的方式进行此操作?

1 个答案:

答案 0 :(得分:2)

让我们在这里做出重要的区分。当服务器呈现视图时,RenderBody在服务器端运行。在服务器完成渲染并将页面发送回浏览器之后,js在客户端上运行。因此,RenderBody始终在js之前运行,并且无法改变它。因此,您编写的伪代码几乎不可能实现。

也就是说,总有一些选项可以通过其他方式获得所需的功能。几个选项包括:

  1. 决定在服务器端呈现的内容。例如,将这个页面选择存储在会话中会是一个很大的开销吗?这也会给你一个额外的好处,即不发送不会显示给用户的html标记,这样可以节省一些流量和一些浏览器渲染时刻。

  2. 默认情况下隐藏标记中的所有内容,就像执行display: none一样简单,在js中决定要显示的内容并使用一行js / jquery显示它。在您当前的代码中实现起来可能更容易一些。