Как я могу реализовать сайт с ASP.NET MVC без использования Visual Studio? - PullRequest
23 голосов
/ 16 марта 2010

Я видел ASP.NET MVC без Visual Studio , который спрашивает, Можно ли создать сайт на основе ASP.NET MVC без использования Visual Studio?

И принятый ответ: да .

Хорошо, следующий вопрос: как?


Вот аналогия. Если я хочу создать страницу ASP.NET Webforms, я загружаю мой любимый текстовый редактор , создаю файл с именем 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, и он работает.

Что мне нужно сделать, чтобы создать простое привет, World ASPNET MVC приложение в текстовом редакторе? ( без Visual Studio )

Предположим, я хочу базовое приложение MVC с контроллером, одним представлением и простой моделью. Какие файлы мне нужно создать, и что в них будет?

Ответы [ 4 ]

20 голосов
/ 16 марта 2010

хорошо, я изучил учебник Вальтера и запустил базовый сайт 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 («действие» по умолчанию)
  • http: / / server / root / HelloWorld / Index (тоже самое, что и выше)
  • http: / / server / root / HelloWorld / English
  • http: / / server / root / HelloWorld / Italiano
  • http: / / server / root / HelloWorld / Sample (представление, реализованное как Sample.aspx)

Каждый метод возвращает Результат действия , один из следующих: View (страница aspx), Redirect, Empty, File (различные параметры), Json, Content (произвольный текст) и Javascript.

Страницы просмотра, такие как 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 конфигурации. Весь этот исходный код и конфигурация доступны для просмотра или загрузки. )

А потом я могу добавить другой статический контент: js, css, изображения и все, что мне нравится.

3 голосов
/ 16 марта 2010

Вы бы сделали именно то, что сделали выше, потому что вы не использовали бы модель или контроллер в приложении hello world.

Все, что делает Visual Studio - это предоставляет вам мастера создания файлов, поэтому теоретически все, что вам нужно сделать, - это создать правильные файлы. Если вам нужны подробные спецификации для структуры проекта MVC, удачи, большая часть документации написана при условии, что вы используете visual studio, но вы можете пошагово пройти учебник и разобраться в нем.

Лучше всего найти загружаемый демонстрационный проект, использовать Visual Studio для реструктуризации структуры проекта или попробовать один из .net IDE с открытым исходным кодом.

2 голосов
/ 16 марта 2010

Вот как выглядит скелет VS по умолчанию для приложения MVC 1.x:

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

Не знаю, если это то, что вы ищете ... ключом здесь, очевидно, является файл web.config.

1 голос
/ 09 января 2015

Примечание: если вы добавили пространство имен, у вас должна быть сборка.

web.config пример для примера проекта Cheeso на opensuse linux под моно проектом.

<?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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...