【问题标题】:razor websites not working and all dlls are present剃须刀网站无法正常工作并且所有 dll 都存在
【发布时间】:2013-10-18 13:18:58
【问题描述】:

我已将 .cshtml 网站上传到 surftown 服务器,但在运行代码时遇到了一些问题。但我在运行Razor 代码时遇到问题。

这是页面的呈现方式:(Default.cshtml)

我已经检查了内部通信问题。这是我的结果:

但是为什么它不起作用,我该如何解决它?

我听说这可能是视图的问题,但如果是这种情况,我应该如何解决这个问题?

我的网站文件夹树:(还有一些文件)

  • 应用程序代码
  • 应用程序数据
      • Microsoft.AspNet.Razor.2.0.20710.0
      • Microsoft.Asp.Net.WebPages.2.0.20710.0
      • Microsoft.Asp.Net.WebPages.Administration.2.0.20710.0
      • Microsoft.Asp.Net.WebPages.Data.2.0.20710.0
      • Microsoft.Asp.Net.WebPages.WebData.2.0.20710.0
      • Microsoft.Web.Infrastructure.1.0.0.0
      • NuGet.Core.1.6.2
    • jQuery.2.0.3
      • 内容
        • 脚本
      • 工具
    • Microsoft.AspNet.Mvc.4.0.30506.0
        • 净40
    • Microsoft.AspNet.Razor.2.0.30506.0
        • 净40
    • Microsoft.AspNet.WebPages.2.0.30506.0
        • 净40
  • 页面
    • 章节
      • 读取.cshtml
    • 编辑
      • 移动
        • 章节.cshtml
      • 入口.cshtml
    • 参赛作品
      • EnterEntry.cshtml
      • EnterNote.cshtml
    • 登录
      • 登录.cshtml
    • 搜索
      • 结果.cshtml
  • 脚本
    • 插件
      • TinyMCE
  • 风格
    • CSS
  • 意见
    • _Layout.cshtml
  • 默认.cshtml

我的 web.config 文件如下所示:

<?xml version="1.0"?>
    <configuration>
        <system.web>
            <compilation debug="true" targetFramework="4.0">
              <buildProviders>
                <add extension=".cshtml" type="System.Web.WebPages.Razor.RazorBuildProvider, System.Web.WebPages.Razor"/>
              </buildProviders>
              <assemblies>
                <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
              </assemblies>
            </compilation>
          </system.web>
          <connectionStrings>
            <add connectionString="database connection" providerName="System.Data.SqlClient"/>
          </connectionStrings>
        </configuration>

编辑: 我所有的文件都是.cshtml 有问题吗?并且它们被添加为MIME Typehtml/text

更多编辑: 这是我的 Default.cshtml 代码:

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

<table>
    <tr>
        <td>
            <table>
                <tr>
                    <td>
                        <h1 class="header">
                            Welcome to the library
                        </h1>
                    </td>
                </tr>
                <tr>
                    <td>
                        <p>
                            Do look around, to find information about almost anything there is to know about Mythodea, or maybe you are here to make a chapter or note of your own.
                        </p>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
</table>

还有我的 _Layout.cshtml 代码: @{ // 一堆C#代码 }

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />

    <link href="~/Styles/CSS/Layout.css" rel="stylesheet" />

    <script src="~/Scripts/Addons/TinyMCE/tinymce.min.js"></script>
    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>

    @RenderSection("head",false)

    <title>The Kettle Library of Mythodea</title>
</head>
<body>
    <div id="container">
        <div id="header">
            <h1>
                The Library
            </h1>
        </div>

        <div id="left_column">
            <div class="innerPadding">
                <div id="Menu_Overview">
                    @Html.Raw(menu)
                </div>
            </div>
        </div>

        <div id="right_column">
            <div class="innerPadding">
                @{
                    if(!SessionHandler.UserIsLoggedIn)
                    {
                        <div class="Login_Wrapper">
                            <form action="" method="post">
                                <table>
                                    <tr>
                                        <td>
                                            <p>
                                                Username/Email:
                                            </p>
                                        </td>
                                        <td>
                                            <input class="form_input" type="text" placeholder="Username / Email" tabindex="1" name="username" value="@username" />
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>
                                            <p>
                                                Password:
                                            </p>
                                        </td>
                                        <td>
                                            <input class="form_input" type="password" placeholder="Password" tabindex="2" name="password" />
                                            <a href="#">forgot?</a>
                                        </td>
                                    </tr>
                                    <tr>
                                        <td>
                                            <input type="submit" value="Login" name="btn" />
                                        </td>
                                        <td>
                                            <input type="submit" value="Register" name="btn" />
                                        </td>
                                    </tr>
                                </table>
                            </form>
                            <p class="Error_Message">@message_error</p>
                        </div>
                    }
                    else
                    {
                        <div class="Login_Wrapper">
                            <form action="" method="post">
                                <p>
                                    @name
                                </p>
                                <input type="submit" value="Logout" name="btn" />
                            </form>
                        </div>
                    }
                }

                <div class="SideMenu_Right">
                    <div id="search_wrapper">
                        <form action="" method="post">
                            <input type="text" name="searchField" placeholder="Search" value="@searchValue" required="required" />
                            <input type="submit" name="btn" value="Search" />
                        </form>
                    </div>

                    @{
                        if(SessionHandler.UserIsLoggedIn)
                        {
                            <a href="~/Pages/Entries/EnterEntry.cshtml">Create new Chapter</a>
                            <br />
                            <br />
                        }
                    }

                    @RenderSection("menu_right", false)
                </div>
            </div>
        </div>
        <div id="middle_column">
            <div class="innerPadding">
                @RenderBody()
            </div>
        </div>
    </div>
    <div id="madeBy">
        <p>
            Created by <a href="https://www.facebook.com/michaeltot.korsgaard" target="_blank">Michael Tot Korsgaard</a>
        </p>
    </div>
</body>
</html>

【问题讨论】:

  • 您需要将错误/问题放在问题中,而不是外部链接。如果您的页面现在可以工作/不再存在,那么下一个人将如何解决他的问题?
  • 更改了图片的链接。感谢您的提醒^^
  • 太棒了。我的第一个猜测是您的 IIS 配置不正确。例如,它是否设置为正确的 Asp.net 版本?编辑 - 好的,我在屏幕截图中看到了,看起来不错....
  • 这里正确的文件夹结构应该是~/views/_viewstart.cshtml加上Layout这一行,然后是~/views中对应的布局文件,用来渲染body。我总是在~/views/shared/ 有我的,而不仅仅是在~/views,你能检查并确保它是这样设置的并且所有路径都正确吗?
  • 您使用的是哪个版本的 mvc(3 或 4)?您是否创建了可部署的依赖项?

标签: c# asp.net-mvc templates razor


【解决方案1】:

您似乎没有使用 MVC 架构。为什么你使用Pages 而不是Views 我已经看到了您所有的错误,并且一切正常。以这种方式解决部署问题太难了。所以我把在真实服务器上部署 MVC 应用程序的基本说明放在了可能有用的地方:

  1. 确保您的应用程序将在 localhost 上正常运行,并且您 没有改变正常的应用程序或没有任何不需要的 默认应用配置错误。
  2. 然后将所需的程序集引用添加到您的项目中,因为 按照以下步骤编译/运行其他 MVC 扩展,例如 razor: 右键单击您的项目 -> 添加可部署的依赖项 -> 标记 MVC 和 Razor -> 好的
  3. 然后再次右键单击您的项目->构建部署包| 然后它将准备好发布。
  4. 然后正常尝试发布过程

到目前为止,您已经配置了与 windows 服务器一起使用的应用程序,尽管它不支持 MVC 技术,但您的应用程序具有相关的程序集引用以在服务器上运行/编译。现在所有的事情都与服务器和 IIS 配置有关。请遵循以下说明:

  1. 通过THIS配置IIS。(如果您的主机支持这种类型的 连接)
  2. 如果服务器是您的,请确保您的服务器没有异常 应用程序配置和根服务器配置相关 .net 框架。

编辑:

关于 MVC 中的默认页面渲染,请考虑在 Global.asax 文件中我们设置默认路由,如下所示(通过调用 RouteConfig 类的 RegisterRoutes 函数):

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

在 MVC 架构中,我们不使用传统的 ASP 页面路由,例如使用 Default.cshtml。 每个Controller在Views Folder中调用自己的同名文件夹,并根据其动作方法控制.cshtml子页面。无法重命名放置在应用程序上的默认视图文件夹。 关于 Mastering 页面考虑默认情况下,每个 MVC 应用程序在决定渲染视图时,首先调用放置在 View 文件夹的根目录_ViewStart.cshtml 文件以了解母版页的名称是什么根据_ViewStart 内容。在这一步到下一步,我们有主视图和部分视图的概念。

例如,如果您尝试更改 _ViewStart.cshtml 文件的名称(例如 _Start.cshtml),您将在浏览器中看到以下页面:

所以在使用 MVC 架构时,您必须遵循一些规则/契约来构建成功的应用程序。

【讨论】:

  • 我知道使用Views 而不是Pages 会更有意义,但我不明白为什么当Default.cshtml (位于网站根目录)时会出现问题,而不是在Views) 正在调用视图_Layout.cshtml 放置在Views 中的视图? PS:正在尝试检查我的服务器主机是否支持IIS连接
  • 我的服务器使用的是 IIS 7
  • IIS 7 没问题。您需要.net 4 支持。我也将视图的呼叫层次结构放在我的答案中,也许将是您的评论答案。
  • 服务器支持.net 4
  • 那么你添加了什么来支持Pages目录?
【解决方案2】:

您的 Views / Pages 文件夹中缺少 web.config

应该是这样的:

<?xml version="1.0"?>

<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization"/>
        <add namespace="System.Web.Routing" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

  <appSettings>
    <add key="webpages:Enabled" value="false" />
  </appSettings>

  <system.web>
    <httpHandlers>
      <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
    </httpHandlers>

    <!--
        Enabling request validation in view pages would cause validation to occur
        after the input has already been processed by the controller. By default
        MVC performs request validation before a controller processes the input.
        To change this behavior apply the ValidateInputAttribute to a
        controller or action.
    -->
    <pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
    </pages>
  </system.web>

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />

    <handlers>
      <remove name="BlockViewHandler"/>
      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
    </handlers>
  </system.webServer>
</configuration>

【讨论】:

  • 我已将您的代码添加到我的web.config 中,现在我在加载的每个页面中都会收到 404 错误。我错过了什么吗?
  • 这就是原因:&lt;httpHandlers&gt; &lt;add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/&gt; &lt;/httpHandlers&gt; 也许尝试创建新的 MVC 项目并复制生成的 web.config
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-17
  • 2022-06-11
  • 2022-06-15
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多