Layout.mobile.cshtml突然停止工作 - 不应该与缓存相关

时间:2013-04-01 20:41:37

标签: layout asp.net-mvc-4

我星期五离开,我的应用程序在开发模式下工作....我今天早上来了,并没有使用Layout.Mobile.chtml .....这是DEV模式所以我仍然启动Web服务器每次....我读到了与缓存相关的类似问题....但是我没有看到这与我的问题有什么关系,因为一旦Web服务器关闭缓存被清除。

我使用Visual Studio 2012作为我的开发“web服务器”。

一切都在运行,我看不出问题出在哪里,也不明白下一步要去哪儿。任何有关如何诊断此问题或在何处查看的建议都将受到赞赏。

这仅适用于Layout.Mobile.cshtml ....当我切换回Layout.cshtml时,它被称为正常....

在我的global.asax.cs中,我有以下设置强制firefox使用移动布局显示:

    //The following forces Firefox to use the Mobile View ONLY
    DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("mobile")
    {
        ContextCondition = (context =>
            context.Request.UserAgent.IndexOf("Mozilla", StringComparison.OrdinalIgnoreCase) >= 0)
    });

我的_ViewStart.cshtml文件是:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

我的_Layout.Cshtml是:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>@ViewBag.Title - Etracs</title>
        <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <meta name="viewport" content="width=device-width" />

        @Styles.Render("~/Content/css")     

 <script src="~/Scripts/jquery-1.9.1.js"></script>
        <script src="~/Scripts/jquery-migrate-1.1.1.js"></script> 

       @RenderSection("scripts", required: false) 
    </head>
    <body>


        <header>
             *@  
        </header>

        <div id="body">         
            <section class="content-wrapper main-content clear-fix">
                @RenderBody()
            </section>
        </div>


        @Html.Partial("_ViewSwitcher")
        <footer>
            <div class="content-wrapper">
                <div class="float-left">
                    <p>&copy; @DateTime.Now.Year - Turning Basin Services</p>
                </div>
            </div>
        </footer>

    </body>
</html>

我的_Layout.Mobile.cshtml是:

    <!DOCTYPE html> 
<html> 
    <head> 
        <meta charset="utf-8" />
        <title>@ViewBag.Title</title> 
        <meta name="viewport" content="width=device-width, initial-scale=1" />

      @*  @Styles.Render("~/Content/Mobile/css")  *@
      @*  @Styles.Render("~/Content/jquerymobile/css") *@ 
        <link rel="stylesheet" href="~/Content/Mobile/css/jquery.mobile-1.2.0.css" />   
        <link rel="stylesheet" href="~/Content/Mobile/css/jquery.mobile.theme-1.2.0.css" />  

      @*  @Scripts.Render("~/bundles/jquery")   *@
      @*  @Scripts.Render("~/bundles/jquerymobile")  *@
        <script src="~/Scripts/jquery-1.9.1.js"></script>
        <script src="~/Scripts/jquery-migrate-1.1.1.js"></script> 
        <script src="~/Scripts/jquery.mobile-1.2.0.js"></script>

        <script>
            $(document).ready(function () {
                $.mobile.ajaxEnabled = false;
            });
        </script>

        @RenderSection("scripts", required: false) 
    </head> 

    <body> 

        <div data-role="page" data-theme="c">

            <div data-role="header"> 
                @RenderSection("backbtn", false)       
                <h1>@ViewBag.Title</h1>
                @RenderSection("Home", false)
            </div>

            <div data-role="content">
               @*     @RenderSection("featured", false) *@
                    @RenderBody()       
            </div>

            <div data-role="footer">
                   <h4>  @Html.Partial("_ViewSwitcher")  &copy; @DateTime.Now.Year - Turning Basin Services</h4>
            </div>
        </div>

   </body>
</html>

在我的视图中,我通常使用viewstart设置视图到impliclity map到布局....但是,我的.Login.Mobile.cshtml硬连线到移动布局的关联如下:

@model TBS.Etracs.Web.Main.Models.LoginModel

@{
    ViewBag.Title = "Log in";
    Layout = "~/Views/Shared/_Layout.Mobile.cshtml";
}



    @Html.ValidationSummary(true)
<section id="loginForm">
   @* @using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) { *@
    @using (Html.BeginForm ("Login")) {
    @Html.AntiForgeryToken()


        <div data-role="content">
            <div data-role="fieldcontain">
                <label for="UserName">UserName:</label>
                @Html.TextBoxFor(m => m.UserName)
                @Html.ValidationMessageFor(m => m.UserName)
            </div>

            <div data-role="fieldcontain">
                <label for="Password">Password</label>
                @Html.PasswordFor(m => m.Password)
                @Html.ValidationMessageFor(m => m.Password)
            </div>


            <div data-role="fieldcontain">
                <label for="ProgramMode">ProgramMode</label>
                <select name="ProgramMode" id="ProgramMode">
                    <option value="VW">VW</option>
                    <option value="Porsche">Porsche</option>
                    <option value="Bentley">Bentley</option>
                </select>
            </div>

         <div data-role="fieldcontain">
                <label for="ConnectionMode">ConnectionMode</label>
                <select name="ConnectionMode" id="ConnectionMode">
                    <option value="Production">Production</option>
                    <option value="Test">Test</option>
                </select>
            </div>


          <input type="submit" value="Log in" />

        </div>

    }
</section>


@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

2 个答案:

答案 0 :(得分:0)

使用Glimpse我发现_layout.mobile.cshtml仍然被调用并包含....问题是它无法工作....这与我之前遇到的问题有关.....

在我的_Layout.Mobile.chtml中,我回到了以下代码,我的布局现在正在运行

    <link rel="stylesheet" href="~/Content/Mobile/css/jquery.mobile-1.2.0.css" /> 
    <link rel="stylesheet" href="~/Content/Mobile/css/jquery.mobile.theme-1.2.0.css" /> 

    <script src="~/Scripts/jquery-1.9.1.js"></script>
    <script src="~/Scripts/jquery-migrate-1.1.1.js"></script> 
    <script src="http://code.jquery.com/mobile/latest/jquery.mobile.min.js"></script> 

我用它来替换_layout.Mobile.cshtml中的以下行

<link rel="stylesheet" href="~/Content/Mobile/css/jquery.mobile-1.2.0.css" />   
<link rel="stylesheet" href="~/Content/Mobile/css/jquery.mobile.theme-1.2.0.css" />  


<script src="~/Scripts/jquery-1.9.1.js"></script>
<script src="~/Scripts/jquery-migrate-1.1.1.js"></script> 
<script src="~/Scripts/jquery.mobile-1.2.0.js"></script>

我非常困惑的一个重要问题是发生了什么......这种流行工作了几天然后退出工作.....输入将不胜感激。

答案 1 :(得分:0)

我看到你承认你不相信这与缓存有关 - 但是我在这里添加了这个,因为在使用移动视图时要注意这一点很重要。

此处解释了缓存错误

  戴夫沃德:

     

使用MVC 4的移动视图时,每个人都应该注意的事项   支持是RTM版本中存在导致错误的错误   在视图丢失后为移动设备呈现错误视图   第一次解析缓存棘手的部分是你   在调试模式下或直到15分钟不活动时才会注意到这一点   发布模式,所以让错误的行为滑倒是非常容易的   投入生产。 NuGet有一个简单的解决方案,Rick Anderson   涵盖在这里:

     

http://blogs.msdn.com/b/rickandy/archive/2012/09/17/asp-net-mvc-4-mobile-caching-bug-fixed.aspx

另见本文中的评论 http://www.hanselman.com/blog/MakingASwitchableDesktopAndMobileSiteWithASPNETMVC4AndJQueryMobile.aspx

如果您有自定义视图引擎(就像我一样),您可以在安装nuget包后更改基类:

public class SiteIdentityViewEngine : Microsoft.Web.Mvc.FixedRazorViewEngine, IVirtualPathFactory