C# 单页MVC?

C# 单页MVC?,c#,asp.net,asp.net-mvc,razor,C#,Asp.net,Asp.net Mvc,Razor,我不太熟悉MVC,尽管过去几天我一直在阅读大量的MVC资料。现在,我需要制作一个只使用一个网页的web项目。该网页将显示来自现有数据库的数据,以及添加和编辑条目。我被告知要使用MVC。虽然在我的研究中,我觉得MVC更适合大型项目。如何在我的单页项目中使用MVC?我在想dbcontext->repository->controllers->models->view之类的东西。这是正确的,还是有更有效的方法 如果我不使用MVC,我可以使用什么 编辑:在一个只有一个页面的项目上使用MVC的最佳方法是什

我不太熟悉MVC,尽管过去几天我一直在阅读大量的MVC资料。现在,我需要制作一个只使用一个网页的web项目。该网页将显示来自现有数据库的数据,以及添加和编辑条目。我被告知要使用MVC。虽然在我的研究中,我觉得MVC更适合大型项目。如何在我的单页项目中使用MVC?我在想dbcontext->repository->controllers->models->view之类的东西。这是正确的,还是有更有效的方法

如果我不使用MVC,我可以使用什么


编辑:在一个只有一个页面的项目上使用MVC的最佳方法是什么?

如果您只需要一个页面应用程序,您可以使用ASP.NET Core的SPA模板:

它们包括MVC ASP.NET+前端MVVM框架,如Angular、Aurelia、Knockout或React

其他选项:对ASP.NET Core:使用Razor页面:

Razor Pages是ASP.NET核心MVC的一项新功能,它使编码 以页面为中心的场景更简单、更高效


如果您只需要一个页面应用程序,则可以使用ASP.NET核心的SPA模板:

它们包括MVC ASP.NET+前端MVVM框架,如Angular、Aurelia、Knockout或React

其他选项:对ASP.NET Core:使用Razor页面:

Razor Pages是ASP.NET核心MVC的一项新功能,它使编码 以页面为中心的场景更简单、更高效


是的,你可以。这类任务有很多方法,我将列举其中两种

MVC方法

MVC方法如下所示: 您将拥有一个控制器,其中包含所有输入逻辑和操作结果

例如:

 public class HomeController : Controller
 {
    public ActionResult index()
    {
       return view();
    }

    public ActionResult ContactUs()
    {
        return view();
    }

    public ActionResult About()
    {
        return view();
    }
var myApp = angular.module('myApp', ["ngRoute"])
    .config(function ($routeProvider) {
        var baseUrl = $("base").first().attr("href");
        $routeProvider.when('/',
        {
            templateUrl: baseUrl + 'Html/Home.html',
            controller: 'myHomeCointroller'
        });
        $routeProvider.when('/About',
        {
            templateUrl: baseUrl + 'Html/About.html',
            controller: 'myAboutController'
        });
$location.path('/About');
}

然后为每个操作创建一个布局页面和一个视图(或部分视图),然后在同一个控制器中进行路由,这样就创建了一个仅更改布局内内容的网页

优点:

  • 您将所有逻辑包含在一个控制器中,这样就可以创建易于访问的代码,因为您知道所有输入逻辑的位置

  • 您可以使用razor通过模型控制视图,允许您创建为您的需要和属性而设计的自定义控件,从而可以轻松地连接到服务器进行get/post请求

  • 缺点

    随着网站的发展,你的控制器会越来越大,从而产生“难以维护”的代码。添加的页面越多,主控制器中添加的逻辑就越多,使得控制器中的代码很长,不可读,并且很难轻松维护

    角度进近:

    角度接近表示,您将在控制器中有一个操作用于开始索引(也称为主页):

    然后,您将创建一个布局页面和html页面以在其中呈现,然后使用angular ui router进行导航

    例如:

     public class HomeController : Controller
     {
        public ActionResult index()
        {
           return view();
        }
    
        public ActionResult ContactUs()
        {
            return view();
        }
    
        public ActionResult About()
        {
            return view();
        }
    
    var myApp = angular.module('myApp', ["ngRoute"])
        .config(function ($routeProvider) {
            var baseUrl = $("base").first().attr("href");
            $routeProvider.when('/',
            {
                templateUrl: baseUrl + 'Html/Home.html',
                controller: 'myHomeCointroller'
            });
            $routeProvider.when('/About',
            {
                templateUrl: baseUrl + 'Html/About.html',
                controller: 'myAboutController'
            });
    
    $location.path('/About');
    
    这样,您可以使用角度“位置”依赖项进行导航,例如:

     public class HomeController : Controller
     {
        public ActionResult index()
        {
           return view();
        }
    
        public ActionResult ContactUs()
        {
            return view();
        }
    
        public ActionResult About()
        {
            return view();
        }
    
    var myApp = angular.module('myApp', ["ngRoute"])
        .config(function ($routeProvider) {
            var baseUrl = $("base").first().attr("href");
            $routeProvider.when('/',
            {
                templateUrl: baseUrl + 'Html/Home.html',
                controller: 'myHomeCointroller'
            });
            $routeProvider.when('/About',
            {
                templateUrl: baseUrl + 'Html/About.html',
                controller: 'myAboutController'
            });
    
    $location.path('/About');
    
    在这个布局页面上创建一个布局页面和一个非常容易导航的系统。 布局页面将仅根据每个html内容更改其内容

    专业人士

    您创建了一个非常灵活且易于维护的应用程序,它不会消耗大量的输入逻辑(控制器代码),并且是角度控制器驱动的,因此也可以创建一种非常简单的方法来在将来修复代码

    缺点

    您不能在html页面中使用razor,因此必须创建大量对服务器的ajax调用,这可能需要您编写一个web api或WCF来连接服务器以获取/发布数据

    您的逻辑将分布在多个角度控制器中,而不是一个位置(例如,家庭控制器中的所有逻辑),在处理需要注意的小问题时,这可能需要时间

    您可以选择采用哪种MVC方法

    对于其他框架,有很多方法可以做到这一点,但同样,它永远不会结束

    按照他们告诉你的,专注于你的任务,学习我告诉你的每种方法的原理,祝你好运

    有关视图的阅读材料:

    有关angular ui路由器的阅读材料:


    是的,你可以。这类任务有很多方法,我将列举其中两种

    MVC方法

    MVC方法如下所示: 您将拥有一个控制器,其中包含所有输入逻辑和操作结果

    例如:

     public class HomeController : Controller
     {
        public ActionResult index()
        {
           return view();
        }
    
        public ActionResult ContactUs()
        {
            return view();
        }
    
        public ActionResult About()
        {
            return view();
        }
    
    var myApp = angular.module('myApp', ["ngRoute"])
        .config(function ($routeProvider) {
            var baseUrl = $("base").first().attr("href");
            $routeProvider.when('/',
            {
                templateUrl: baseUrl + 'Html/Home.html',
                controller: 'myHomeCointroller'
            });
            $routeProvider.when('/About',
            {
                templateUrl: baseUrl + 'Html/About.html',
                controller: 'myAboutController'
            });
    
    $location.path('/About');
    
    }

    然后为每个操作创建一个布局页面和一个视图(或部分视图),然后在同一个控制器中进行路由,这样就创建了一个仅更改布局内内容的网页

    优点:

  • 您将所有逻辑包含在一个控制器中,这样就可以创建易于访问的代码,因为您知道所有输入逻辑的位置

  • 您可以使用razor通过模型控制视图,允许您创建为您的需要和属性而设计的自定义控件,从而可以轻松地连接到服务器进行get/post请求

  • 缺点

    随着网站的发展,你的控制器会越来越大,从而产生“难以维护”的代码。添加的页面越多,主控制器中添加的逻辑就越多,使得控制器中的代码很长,不可读,并且很难轻松维护

    角度进近:

    角度接近表示,您将在控制器中有一个操作用于开始索引(也称为主页):

    然后,您将创建一个布局页面和html页面以在其中呈现,然后使用angular ui router进行导航

    例如:

     public class HomeController : Controller
     {
        public ActionResult index()
        {
           return view();
        }
    
        public ActionResult ContactUs()
        {
            return view();
        }
    
        public ActionResult About()
        {
            return view();
        }
    
    var myApp = angular.module('myApp', ["ngRoute"])
        .config(function ($routeProvider) {
            var baseUrl = $("base").first().attr("href");
            $routeProvider.when('/',
            {
                templateUrl: baseUrl + 'Html/Home.html',
                controller: 'myHomeCointroller'
            });
            $routeProvider.when('/About',
            {
                templateUrl: baseUrl + 'Html/About.html',
                controller: 'myAboutController'
            });
    
    $location.path('/About');
    
    这个w