MVC(实战一)

一、创建MVC项目

二、界面分布

Content:是存放css文件等,暂时先不考虑。

Controllers:重要, 控制层,控制界面显示和界面逻辑的,其实真正业务逻辑层,建议分层出去。

Models:重要,界面展示Model,

Script:暂不考虑

Views:重要,界面层。

Global.asax:全局文件,配置资源加载 和 初始启动页

Web.config:系统全局配置文件。

三、创建新功能

1、创建Model类

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.ComponentModel.DataAnnotations;
 6 using System.ComponentModel;
 7 
 8 /*
 9  * [Required]
10    [DataType(DataType.Text)]
11    [DisplayName("姓名")]
12  * 进行数据验证
13  */
14 namespace MvcApplication1.Models
15 {
16     public class GuestbookModel:ICloneable
17     {
18         [Required]
19         [DataType(DataType.Text)]
20         [DisplayName("姓名")]
21         public string name { get; set; }
22 
23         [DataType(DataType.EmailAddress)]
24         [DisplayName("邮箱")]
25         public string Email { get; set; }
26 
27         [Required]
28         [DataType(DataType.MultilineText)]
29         [DisplayName("内容")]
30         public string content { get; set; }
31 
32 
33     
34         public object  Clone()
35         {
36              return this.MemberwiseClone();
37         }
38    }
39 
40     public class GuestbookSource
41     {
42         private static GuestbookSource m_Source = null;
43         private static List<GuestbookModel> m_LstModel = null;
44         private GuestbookSource()
45         {
46             m_LstModel = new List<GuestbookModel>();
47         }
48 
49         public static GuestbookSource GetInstance()
50         {
51             if (m_Source == null)
52                 m_Source = new GuestbookSource();
53 
54             return m_Source;
55         }
56 
57         public bool Add(GuestbookModel model)
58         {
59             if(!m_LstModel.Contains(model))
60             m_LstModel.Add(model);
61             return true;
62         }
63 
64         public bool Delete(GuestbookModel model)
65         {
66             if(m_LstModel.Contains(model))
67             m_LstModel.Remove(model);
68             return true;
69         }
70         public bool Delete(string name)
71         {
72             return Delete(m_LstModel.FirstOrDefault(a => a.name == name));             
73         }
74  
75         public List<GuestbookModel> SelectAll()
76         {            
77             List<GuestbookModel> lst = new List<GuestbookModel>();
78             foreach (GuestbookModel m in m_LstModel)
79                 lst.Add((GuestbookModel)m.Clone());
80 
81             return lst;
82         }
83 
84         public GuestbookModel Find(string name)
85         {
86             return m_LstModel.FirstOrDefault(a=>a.name.Equals(name));
87         }
88     }
89 }
示例代码

这个Model类,需要将的地方,只有一个,就是 属性上的说明

using System.ComponentModel.DataAnnotations;
using System.ComponentModel;

[Required]                                          表示 name 属性 是必填的
[DataType(DataType.Text)]                表示 name属性 的数据类型
[DisplayName("姓名")]                       表示 name属性 显示的注释

public string name { get; set; }

注释:GuestbookSource 是模拟缓存数据,跟逻辑没有关系。

2、创建Controller 类 GuestbookController ,

 

 注意:

   1) 类名,必须以Controller结尾,并必须继承Controller(对初学者,先理解到这个地方)

   2)创建Index Action,获取数据源。然后将获取到的数据,传入到View(结果集)

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Mvc;
 6 using MvcApplication1.Models;
 7 
 8 namespace MvcApplication1.Controllers
 9 {
10     public class GuestbookController : Controller
11     {
12         //
13         // GET: /Guestbook/
14 
15 
16         public ActionResult Index()
17         {
18             List<GuestbookModel> lstModel = GuestbookSource.GetInstance().SelectAll();
19 
20             return View(lstModel);
21         }
22 
23         public ActionResult Write()
24         {
25             return View();
26         }
27 
28         public ActionResult Edit(GuestbookModel model)
29         {
30             string name = model.name.ToString();
31             string em = model.Email;
32             Console.WriteLine("aa=" + name);
33 
34             if (!string.IsNullOrWhiteSpace(name))
35             {
36                 GuestbookModel m = GuestbookSource.GetInstance().Find(name);
37                 return View(m);
38             }
39             else
40                 return View();
41         }
42 
43         public ActionResult Delete(string name)
44         {
45             if (!string.IsNullOrWhiteSpace(name))
46             {
47                 bool b = GuestbookSource.GetInstance().Delete(name);
48                 
49             }
50 
51            return  RedirectToAction("Index");
52         }
53 
54 
55         [HttpPost]
56         public ActionResult Save(GuestbookModel model)
57         {
58             //ModelState.IsValid 表示验证通过。
59             if (ModelState.IsValid)
60             {
61                 GuestbookSource.GetInstance().Add(model);
62 
63                 //执行完毕后,执行Index的方法
64                 return RedirectToAction("Index");
65             }
66             else
67                 return RedirectToAction("Write");
68         }
69     }
70 }
Controller

3、创建View

   右键Controller类中的 Index()方法,选择 添加View

添加后,在Views中增加如下视图

 切记,方法名和View保持一致,这是最好的编程习惯

4、在View显示结果信息

 1 <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcApplication1.Models.GuestbookModel>>" %>
 2 
 3 <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
 4     显示留言
 5 </asp:Content>
 6 
 7 <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
 8 
 9     <h2>显示留言</h2>
10 
11     <table>
12         <tr>
13             <th>姓名:</th>
14             <th>Email:</th>
15             <th>内容:</th>
16         </tr>
17 
18     <% foreach (var item in Model) { %>
19     
20         <tr>
21             <td>
22             <%: item.name %>
23             </td>
24              <td>
25             <%: item.Email %>
26             </td>
27              <td>
28             <%: item.content %>
29             </td>
30             <td>
31                 <%: Html.ActionLink("Edit", "Edit", new MvcApplication1.Models.GuestbookModel(){ name = item.name, Email = item.Email })%> |
32                 <%: Html.ActionLink("Details", "Details", new {  id=item.name })%> |
33                 <%: Html.ActionLink("Delete", "Delete", new { name=item.name })%>
34             </td>
35         </tr>
36     
37     <% } %>
38 
39     </table>
40 
41     <p>
42         <%: Html.ActionLink("留下足迹", "Write") %>
43     </p>
44 
45 </asp:Content>
View显示列表

 5、前端校验

在模板页中,增加javascript引用。

<!--在界面层加入验证-->
  <script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
  <script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
  <script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>
<!--在界面层加入验证-->

 1 <%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.GuestbookModel>" %>
 2 
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 4 
 5 <html xmlns="http://www.w3.org/1999/xhtml" >
 6 <head runat="server">
 7     <title>Write</title>
 8 </head>
 9 <body>
10     <div>
11    
12     <form method=post action="/Guestbook/Save">
13     <!--前端验证-->
14      <% Html.EnableClientValidation(); %>
15 
16     <% using (Html.BeginForm("Save", RouteData.Values["controller"].ToString()))
17        {%>
18     <%=Html.LabelFor(x=>x.name)%>
19     <%=Html.TextBoxFor(x=>x.name)%>
20 
21     <!--为每个字段添加验证-->
22     <%=Html.ValidationMessageFor(a=>a.name) %>
23     <br/>
24 
25     <%=Html.LabelFor(x=>x.Email)%>
26     <%=Html.TextBoxFor(x=>x.Email)%>
27     <%=Html.ValidationMessageFor(a=>a.Email) %>
28     <br/>
29 
30     <%=Html.LabelFor(x=>x.content)%>
31     <%=Html.TextAreaFor(x=>x.content)%>
32     <%=Html.ValidationMessageFor(a=>a.content) %>
33     <br/>
34 
35     <input type=submit />
36     </form>
37 
38     <% } %>
39     </div>
40 </body>
41 </html>
Write

6、编辑

7、设置 项目首页

原文地址:https://www.cnblogs.com/qiupiaohujie/p/12002881.html