ASP.NET——MVC编程

[复制链接]
发表于 2025-11-4 00:12:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一、什么是MVC编程模式

ASP.NET支持三种差异的开发模式:
WebPages(Web页面)、WebForms(Web窗体)、MVC(Model-View-Controller 模子-视图-控制器)
MVC是ASP.NET三种编程模式中的一种,是一种利用MVC(Model-View-Controller 模子-视图-控制器)筹划创建Web应用步调的模式。
二、MVC筹划模式

MVC分层有助于管理复杂的应用步调,可以让开发者在一个时间内关注一个方面,比方,开发者可以在不依赖业务逻辑的环境下举行视图筹划。同时让应用步调的测试更加容易。
同时也简化了分组开发。差异开发职员可同时对视图,控制器逻辑,业务逻辑举行开发。
2.1)Model (模子)

Model(模子)表现应用步调核心(比如数据库记载列表)
是应用步调中用于处理惩罚应用步调数据逻辑的部门,通常模子对象负责在数据库中存取数据
2.2)View(视图)

View(视图)表现数据(数据库记载)
是应用步调中处理惩罚数据表现的部门,通常视图是依据模子数据创建的
2.3)Controller(控制器)

Controller(控制器)处理惩罚输入(写入数据库记载)
是应用步调中处理惩罚用户交互的部门,通常控制器负责从视图读取数据,控制用户输入,并向模子发送数据。
2.4)三者之间的交互关系

2.4.1)用户通过视图举行操纵,如点击按钮、输入文本等,这些操纵会触发相应的事故,视图将这些事故转达给控制器

2.4.2)控制器吸取到事故后,根据事故范例和业务逻辑,调用模子中的方法来处理惩罚数据

2.4.3)模子处理惩罚完数据后,将效果返回给控制器

2.4.4)控制器根据模子返回的效果,选择符合的视图来展示数据,并将数据转达给视图,视图将数据展示给客户

三、C#中MVC模式的简单示例

在ASP.NET MVC模式中,MVC模式的应用较为范例,以下是一个简单示例:
3.1) 模子

  1. public class Product
  2. {
  3.     public int ProductId { get; set; }
  4.     public string ProductName { get; set; }
  5.     public decimal Price { get; set; }
  6. }
  7. public class ProductRepository
  8. {
  9.     private List<Product> products = new List<Product>
  10.     {
  11.         new Product { ProductId = 1, ProductName = "Product 1", Price = 10.99m },
  12.         new Product { ProductId = 2, ProductName = "Product 2", Price = 19.99m }
  13.     };
  14.     public List<Product> GetAllProducts()
  15.     {
  16.         return products;
  17.     }
  18. }
复制代码
3.2)视图

在Views文件夹下创建Product文件夹,再在该文件夹下创建Index.cshtml文件,代码如下
  1. @model IEnumerable<MvcApp.Models.Product>
  2. <h2>Product List</h2>
  3. <ul>
  4.     @foreach (var product in Model)
  5.     {
  6.         <li>@product.ProductName - [email protected]</li>
  7.     }
  8. </ul>
复制代码
3.3)控制器

  1. public class ProductController : Controller
  2. {
  3.     private ProductRepository productRepository;
  4.     public ProductController()
  5.     {
  6.         productRepository = new ProductRepository();
  7.     }
  8.     public ActionResult Index()
  9.     {
  10.         var products = productRepository.GetAllProducts();
  11.         return View(products);
  12.     }
  13. }
  14. // Product 类和 ProductRepository 类构成了模型部分,负责处理产品数据。ProductController 是控制器,用于处理用户请求并将数据传递给视图。Index.cshtml 是视图,用于展示产品列表数据。
复制代码
四、MVC模式的上风与劣势

4.1 )MVC模式的上风

4.1.1 )分离关注点

        使代码结构更清晰,各个部门的职责明确,易于维护和扩展。项目结构更加i清晰,易于明白和管理。在必要对某一功能举行修改和扩展时,开发职员可以快速定位到对应的模块举行操纵,不会影响其他无关部门,大大的进步了代码的可维护性
4.1.2 )进步可测试性

        模子和控制器可以独立举行单位测试,进步了代码的可测试性和质量。同时,在测试的过程中可以通过利用模仿对象来代替真实的依赖对象,比如在测试控制器时,可以模仿模仿对象的举动,一边更好的控制测试环境,确保测试的准确性和可重复性
4.1.3 )支持团队协作

        差异的开发职员可以分别负责模子、视图和控制器的开发,进步开发服从,开发职员在各自的模块举行开发,淘汰了因代码修改而产生的辩论,在代码归并时,更容易办理大概出现的标题,包管项目的顺遂举行
4.1.4 )加强可扩展性

        当必要添加新的功能或修改业务逻辑时,只必要在相应的模块中举行修改,不会影响其他模块的功能,大大进步了代码的可维护性。同时,MVC 模式答应将差异的功能模块以插件的情势举行开发和集成,每个插件可以包罗自己的模子、视图和控制器,方便地与主应用步调举行集成,实现功能的扩展和定制
4.2 )MVC模式的劣势

4.2.1)开发复杂性增长

        对于初学者来说,要明白和把握MVC模式必要肯定的时间和学习本钱,必要去相识他们之间的关系,以及C#中怎样实现这种架构模式
4.2.2)设置和搭建复杂

        在 C# 中利用 MVC 模式,尤其是在一些框架如ASP.NET MVC 中,必要举行一些设置和搭建工作,如路由设置、依赖注入设置等。这些设置工作大概会比力繁琐,对于不认识框架的开发职员来说,大概会出现设置错误,导致应用步调出现标题
4.2.3)数据转达复杂

        在 MVC 架构中,数据必要在模子、控制器和视图之间举行转达,大概必要举行数据的转换和封装等操纵,这也大概会对性能产生肯定的影响。特别是当转达大量数据或复杂对象时,性能标题大概会更加显着
4.2.4)会造成额外的开销

        MVC 模式中的模子、视图和控制器之间的交互大概会带来一些额外的性能开销。比方,控制器调用模子方法、转达数据给视图等操纵都必要肯定的时间和资源,在一些对性能要求极高的场景下,大概会影相应用步调的团体性能
4.2.5)视图和控制器的紧耦性

些 C# 的 MVC 框架中,视图和控制器之间大概存在肯定的紧耦合关系。视图大概必要依赖于特定的控制器方法或属性来获取数据,大概控制器必要相识视图的详细实现细节来举行数据转达和操纵,这大概会导致在视图或控制器举行修改时,必要同时修改另一方,违反了松耦合的筹划原则,使得视图中的一些逻辑大概难以在其他项目或模块中举行复用,低落了代码的复用性
五、ASP.NET MVC框架开发示例

利用C#中的ASP.NET MVC框架开发Web应用步调的示例
5.1 )创建项目

起首,创建一个新的ASP.NET MVC项目,在VS中,选择 “创建新项目”,然后选择 “ASP.NET Web 应用步调”,并选择 “MVC” 模板
5.2 )模子(Model)

在Models文件夹中创建一个TaskModel类,用于表现任务对象,包罗任务的根本信息和相干操纵
  1. using System.Collections.Generic;
  2. namespace MvcTaskManager.Models
  3. {
  4.     public class TaskModel
  5.     {
  6.         public int Id { get; set; }
  7.         public string Name { get; set; }
  8.         public bool IsCompleted { get; set; }
  9.         // 模拟数据存储
  10.         private static List<TaskModel> tasks = new List<TaskModel>();
  11.         // 创建任务
  12.         public static void CreateTask(TaskModel task)
  13.         {
  14.             tasks.Add(task);
  15.         }
  16.         // 获取所有任务
  17.         public static List<TaskModel> GetAllTasks()
  18.         {
  19.             return tasks;
  20.         }
  21.         // 删除任务
  22.         public static void DeleteTask(int id)
  23.         {
  24.             tasks.RemoveAll(t => t.Id == id);
  25.         }
  26.     }
  27. }
复制代码
5.3 )控制器(Controller)

在Controllers文件夹中创建一个TaskController类,用于处理惩罚用户哀求并调用相应的模子方法
  1. using System.Web.Mvc;
  2. using MvcTaskManager.Models;
  3. namespace MvcTaskManager.Controllers
  4. {
  5.     public class TaskController : Controller
  6.     {
  7.         // 显示任务列表
  8.         public ActionResult Index()
  9.         {
  10.             var tasks = TaskModel.GetAllTasks();
  11.             return View(tasks);
  12.         }
  13.         // 显示创建任务的页面
  14.         public ActionResult Create()
  15.         {
  16.             return View();
  17.         }
  18.         // 处理创建任务的请求
  19.         [HttpPost]
  20.         public ActionResult Create(TaskModel task)
  21.         {
  22.             if (ModelState.IsValid)
  23.             {
  24.                 TaskModel.CreateTask(task);
  25.                 return RedirectToAction("Index");
  26.             }
  27.             return View(task);
  28.         }
  29.         // 处理删除任务的请求
  30.         public ActionResult Delete(int id)
  31.         {
  32.             TaskModel.DeleteTask(id);
  33.             return RedirectToAction("Index");
  34.         }
  35.     }
  36. }
复制代码
5.4 )视图(View)

在View/Task文件夹中创建以下视图
5.4.1 )Index.cshtml(任务列表视图)

  1. @model IEnumerable<MvcTaskManager.Models.TaskModel>
  2. @{
  3.     ViewBag.Title = "任务列表";
  4. }
  5. <h2>任务列表</h2>
  6. <ul>
  7.     @foreach (var task in Model)
  8.     {
  9.         <li>
  10.             @task.Name - @(task.IsCompleted? "已完成" : "未完成")
  11.             @Html.ActionLink("删除", "Delete", new { id = task.Id })
  12.         </li>
  13.     }
  14. </ul>
  15. @Html.ActionLink("创建新任务", "Create")
复制代码
5.4.2 )Create.cshtml(创建任务视图)

  1. @model MvcTaskManager.Models.TaskModel
  2. @{
  3.     ViewBag.Title = "创建任务";
  4. }
  5. <h2>创建任务</h2>
  6. @using (Html.BeginForm("Create", "Task", FormMethod.Post))
  7. {
  8.     <div>
  9.         <label for="Name">任务名称:</label>
  10.         @Html.TextBoxFor(model => model.Name)
  11.         @Html.ValidationMessageFor(model => model.Name)
  12.     </div>
  13.     <div>
  14.         <input type="submit" value="创建" />
  15.     </div>
  16. }
复制代码
5.5 )路由设置

在RouteConfig.cs文件中设置路由,确保哀求可以大概准确路由到相应的控制器和操纵
  1. using System.Web.Mvc;
  2. using System.Web.Routing;
  3. namespace MvcTaskManager
  4. {
  5.     public class RouteConfig
  6.     {
  7.         public static void RegisterRoutes(RouteCollection routes)
  8.         {
  9.             routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
  10.             routes.MapRoute(
  11.                 name: "Default",
  12.                 url: "{controller}/{action}/{id}",
  13.                 defaults: new { controller = "Task", action = "Index", id = UrlParameter.Optional }
  14.             );
  15.         }
  16.     }
  17. }
复制代码
5.6 )启动应用步调

运行应用步调,可以看到以下功能
        5.6.1)访问/Task/Index会表现任务列表

        5.6.2)点击“创建新任务”会进入创建任务界面

        5.6.3)在创建任务页面输入任务名称并提交会创建一个新任务,并返回到任务列表页面

        5.6.4)任务列表页面中,每个任务反面有一个“删除”链接,点击删除该任务

5.7 )注意事项

5.7.1)这是一个简单的示例,实际应用中,必要更加复杂的业务逻辑和数据存储,如利用数据库存储任务数据

5.7.2)可以Entity Framework利用等ORM工具与数据库举行交互,将TaskModel映射到数据库

5.7.3)可以添加更多的验证逻辑,比方在TaskModel中添加属性验证,在Create方法中查抄用户输入的合法性

通过这个示例,你可以看到怎样利用 C# 的 MVC 模式开发一个简单的 Web 应用步调,将业务逻辑、用户界面和哀求处理惩罚清晰地分离,进步开发服从和代码的可维护性。根据必要,可以进一步扩展和优化该示例,添加更多的功能和页面。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表