如何在不使用Visual Studio的情况下使用ASP.NET MVC实现站点?

时间:2010-03-15 23:17:24

标签: asp.net asp.net-mvc

我见过ASP.NET MVC Without Visual Studio,请问, 是否可以在不使用Visual Studio的情况下生成基于ASP.NET MVC的网站?

接受的答案是,

好的,下一个问题:怎么样?


这是一个类比。如果我想创建一个ASP.NET Webforms页面,我加载my favorite text editor,创建一个名为Something.aspx的文件。然后我插入该文件,一些样板:

<%@ Page Language="C#"
  Debug="true"
  Trace="false"
  Src="Sourcefile.cs"
  Inherits="My.Namespace.ContentsPage"
%>

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Title goes here </title>
    <link rel="stylesheet" type="text/css" href="css/style.css"></link>

    <style type="text/css">
      #elementid {
          font-size: 9pt;
          color: Navy;
         ... more css ...
      }
    </style>

    <script type="text/javascript" language='javascript'>

      // insert javascript here.

    </script>

  </head>

  <body>
      <asp:Literal Id='Holder' runat='server'/>
      <br/>
      <div id='msgs'></div>
  </body>

</html>

然后我还创建了Sourcefile.cs文件:

namespace My.Namespace
{
    using System;
    using System.Web;
    using System.Xml;
    // etc... 

    public class ContentsPage : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Literal Holder;

        void Page_Load(Object sender, EventArgs e)
        {
            // page load logic here
        }
    }
}

是一个有效的ASPNET页面,在文本编辑器中创建。将它放入IIS虚拟目录,它正在工作。

要在文本编辑器中制作基本的, hello,World ASPNET MVC应用程序,我该怎么做? (没有Visual Studio

假设我想要一个带控制器,一个视图和一个简单模型的基本MVC应用程序。我需要创建哪些文件,以及它们会产生什么?

4 个答案:

答案 0 :(得分:20)

好的,我检查了Walther's tutorial并运行了一个基本的MVC网站。

所需文件是:

Global.asax
App_Code\Global.asax.cs
App_Code\Controller.cs
Views\HelloWorld\Sample.aspx
web.config

就是这样。

在Global.asax中,我提供了这个样板:

<%@ Application Inherits="MvcApplication1.MvcApplication" Language="C#" %>

并且MvcApplication类在名为Global.asax.cs的模块中定义,该模块必须放在App_Code目录中。内容如下:

using System.Web.Mvc;
using System.Web.Routing;

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default",                      // Route name
            "{controller}/{action}/{arg}",  // URL with parameters
            new {                           // Parameter defaults
              controller = "HelloWorld",
              action = "Index", 
              arg = "" }                 );
    }

    protected void Application_Start()
    {
        RegisterRoutes(RouteTable.Routes);
    }
}

Controller.cs提供处理各种请求的逻辑。在这个简单的例子中,控制器类是这样的:

using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
    public class HelloWorldController : Controller
    {
        public string Index()
        {
            return "Hmmmmm...."; // coerced to ActionResult
        }

        public ActionResult English()
        {
            return Content("<h2>Hi!</h2>");
        }

        public ActionResult Italiano()
        {
            return Content("<h2>Ciao!</h2>");
        }

        public ViewResult Sample()
        {
            return View();  // requires \Views\HelloWorld\Sample.aspx
        }
    }
}

Controller类必须命名为XxxxxController,其中Xxxxx部分定义URL路径中的段。对于名为HelloWorldController的控制器,URL路径段为HelloWorld。 Controller类中的每个公共方法都是 action ;当该方法名称包含在url路径中的另一个段中时,将调用该方法。因此,对于上述控制器,这些URL将导致调用各种方法:

  • http:/ / server / root / HelloWorld(默认为“action”)
  • http:/ / server / root / HelloWorld / Index(与上面相同)
  • http:/ / server / root / HelloWorld / English
  • http:/ / server / root / HelloWorld / Italiano
  • http:/ / server / root / HelloWorld / Sample(一个视图,实现为Sample.aspx)

每个方法都返回一个 Action结果,其中包括以下内容之一:View(aspx页面),Redirect,Empty,File(各种选项),Json,Content(任意文本)和Javascript。< / p>

View页面(例如本例中的Sample.aspx)必须来自System.Web.Mvc.ViewPage

<%@ Page Language="C#"
  Debug="true"
  Trace="false"
  Inherits="System.Web.Mvc.ViewPage"
 %>

就是这样!将上述内容放入IIS vdir可以获得一个有效的ASPNET MVC站点。

(好吧,我还需要web.config文件,其中包含8k配置。All this source code and configuration is available to browse or download.

然后我可以添加其他静态内容:js,css,images以及我喜欢的任何其他内容。

答案 1 :(得分:3)

您可以完全按照上面的操作进行操作,因为您不会在hello world应用程序中使用模型或控制器。

所有visual studio都会为您提供文件创建向导,因此理论上,您需要做的就是创建正确的文件。如果你想要MVC项目结构的详细规范,祝你好运,大多数文档是在你使用visual studio的情况下编写的,但是你可能会逐步完成一个教程,并将其解决。

您最好的办法是找到一个可下载的演示项目,使用visual studio对项目结构进行反向工程,或者尝试使用其中一个开源的.net IDE。

答案 2 :(得分:2)

嗯,这就是MVC 1.x应用程序的默认VS骨架的样子:

Content
 Site.css
Controllers
 AccountController.cs
 HomeController.cs
Models
Scripts
 (all the jquery scripts)
 MicrosoftAjax.js
 MicrosoftMvcAjax.js
Views
 web.config
 Account
  ChangePassword.aspx
  ChangePasswordSuccess.aspx
  LogOn.aspx
  Register.aspx
 Home
  About.aspx
  Index.aspx
Shared
 Error.aspx
 LogOnUserControl.ascx
 Site.master
Default.aspx
Global.asax
web.config

Dunno,如果这就是你要找的......这里的关键显然是web.config文件。

答案 3 :(得分:1)

注意:如果添加了命名空间,则必须有一个程序集。

web.config 在monouse linux下单声道项目中的Cheeso示例项目示例。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="dotless" type="dotless.Core.configuration.DotlessConfigurationSectionHandler, dotless.Core" />
  </configSections>
  <appSettings>
    <add key="webpages:Version" value="1.0.0.0" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <customErrors mode="Off"/>
    <compilation debug="true" targetFramework="4.0">
      <assemblies>
        <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<!--        <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> -->
      </assemblies>
    </compilation>
    <authentication mode="None"></authentication>
    <pages>
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
<!--        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.WebPages" /> -->
      </namespaces>
    </pages>
    <httpHandlers>
      <add path="*.less" verb="GET" type="dotless.Core.LessCssHttpHandler, dotless.Core" />
    </httpHandlers>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
      <add name="dotless" path="*.less" verb="*" type="dotless.Core.LessCssHttpHandler,dotless.Core" resourceType="File" preCondition="" />
    </handlers>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Abstractions" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
  <dotless minifyCss="false" cache="true" web="false" />
</configuration>