2

我已将.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 Type html/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>
4

2 回答 2

4

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

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

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

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

编辑:

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

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

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

更改 _ViewStart.cshtml 文件名时出错

因此,在使用 MVC 架构时,您必须遵循一些规则/合同来构建成功的应用程序。

于 2013-10-21T19:56:55.517 回答
1

您的 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>
于 2013-10-18T21:49:43.773 回答