鸭脖娱乐网页版

  • <tr id='z3fgf'><strong id='m1jrt'></strong> <small id='mh7cx1'></small><button id='yez7f'></button><li id='aicg'> <noscript id='5nrcgf'><big id='ssce0'></big><dt id='ca5vql'></dt></noscript></li></tr> <ol id='3v0b'><option id='rw88c'><table id='xssbf'><blockquote id='walq4r'> <tbody id='ypvz'></tbody></blockquote></table></option></ol><u id='y8iyy7'></u><kbd id='tr66'> <kbd id='jsspn8'></kbd></kbd>

    <code id='hf9w1'><strong id='zskbck'></strong></code>

    <fieldset id='qhwamm'></fieldset>
          <span id='79m7a'></span>

              <ins id='z3ybjg'></ins>
              <acronym id='pt10f'><em id='5rsf'></em><td id='724es'><div id='qzqs'></div></td></acronym><address id='rlaf1'><big id='fsuo'><big id='2vh6'></big><legend id='ez2clq'></legend></big></address>

              <i id='l7jd'><div id='3tun'><ins id='t3d0rp'></ins></div></i>
              <i id='hs14'></i>
            1. <dl id='ypcgpl'></dl>
              1. <blockquote id='fmhq4f'><q id='ryznx6'><noscript id='m7eho'></noscript><dt id='4vlr2'></dt></q></blockquote><noframes id='zomhxo'><i id='jt6d'></i>
                21085 1
                2016-03-29 Dodu 公司动态

                最近在做一些比较基础的部分,做到界面时想到一个问题:

                在ASP.NET MVC(Razor View Engine)中,如果我要让多个项目之间共享一个_Layout.cshtml,那样的话对于维护程序和统一风格都是有比较大的帮助的。但是问题是,如果真的要共享的话,各个项目之间不同的元素该如何处理呢,比如:Logo,项目名称等。看到了_LogOnPartial.cshtml文件让我想起来一个方法,如果我在_Layout.cshtml里定义一个变量,然后再做一个Partial.cshtml,在这个Partial里为_Layout.cshtml中的变量赋值,这样不就行了吗,说简单点就是定义一个在Layout和Partial里面"共用"的变量不就解决了吗,赶紧试试。

                结果是很快发现这貌似行不通,因为无论是Layout、View还是Partial,在运行时都是被编译成一个类,并且生成了这个类的实例,然后按照一定的顺序执行的,在设计阶段还没有实例呢,所以定义变量貌似不现实。于是又想到ViewBag和ViewData,试一下,又发现不行,各个View(Layout、Partial)中的ViewBag和ViewData实际上也是他们自已的,和其他的View没有关系,在Partial的ViewData里添加一个元素,到了Loyout里面根本就找不见了。

                那么Partial和Layout之间有什么联系呢,答案很快出来了,Controller,他俩在生命周期存在时肯定是用了同一个Controller实例!赶紧调试下,果然发现在Partial执行时,Partial的ViewData和Controller的ViewData中的元素个数不同,这就说明他俩没有使用同一个引用,于是在Partial里向Controller的ViewData添加一个元素,然后在Layout中已经调用过Partial的代码下方尝试读取Controller.ViewData中的元素,果然得到了期望的结果。

                用法示例:

                ViewContext.Controller.ViewData.Add("test","abcd");

                最后再查查MSDN,发现了另一个方法也能解决这个问题,即使用WebViewPage.Context.Items属性,Context的类型为HttpContextBase,其Items属性的描述如下:

                “在派生类中重写时,获取一个键/值集合,该集合在 HTTP 请求过程中可以用于在模块与处理程序之间组织和共享数据。”

                经测试,使用:

                Context.Items["test"] ="abcd";

                的方式也能达到在两个View间“共享变量”的效果,但是我推荐使用第一种方法。


                发表评论:

                werqwer

                werqwer 2016-10-22

                <a href="12334"><a/>