Asp.Net MVC系列--基础篇(3)
来源:互联网 发布:linux 从u盘启动 编辑:程序博客网 时间:2024/06/06 09:23
这一节,介绍一下如何用已经创建好的Domain Model 层,来构建一个简单的demo
1. 右键controller->添加一个controller 命名为StudentClassController
完成以下Action:
public class StudentClassController :Controller{//先传进来接口,后面会用structuremap来做DI private IStudentContext _studentContext; public StudentClassController(IStudentContext context) { _studentContext = context; } //用于显示一个class列表 public ActionResult ClassList() { var model = _studentContext.StudentClasseList; return View("ClassList", model); } //用于显示class详细内容,学生列表 public ActionResult ClassDetails(int classId) { var model = _studentContext.StudentClasseList.First(c => c.Id ==classId); var students = _studentContext.StudentList.Where(s => s.ClassId ==classId); model.Students = students.Any() ? students.ToList() : newList<Student>(); return View("ClassStudentList", model); } //指向创建studentview,传递classId过去 public ActionResult GotoCreateStudent(int classId) { return View("CreateStudent", new Student {ClassId = classId}); } //创建一个student,创建成功并返回到class 详细信息页面 [HttpPost] public ActionResult CreateStudent(Student student) { if (ModelState.IsValid) { _studentContext.Students.Add(student); _studentContext.Save(); var model =_studentContext.StudentClasses.Find(student.ClassId); model.Students =_studentContext.Students.Where(s => s.ClassId == student.ClassId).ToList(); returnView("ClassStudentList",model); } return View("CreateStudent", student); }
接下来,添加三个View
1. 右键Views->添加文件夹->StudentClass
2. 右键StudentClass->添加View->Class List View
View代码:
@modelIEnumerable<eStudentDomain.Entity.StudentClass> @{ Layout = null;} <!DOCTYPE html> <html><head> <meta name="viewport"content="width=device-width" /> <title>ClassList</title></head><body> <table> <tr> <th> @Html.DisplayNameFor(model=> model.Name) </th> <th></th> </tr> @foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem=> item.Name) </td> <td> @Html.ActionLink("Details", "ClassDetails","StudentClass", new { classId = item.Id }, null); </td> </tr> } </table></body></html>
代码说明:使用此View的合约,需要传递一个IEumerable<StudentClass> , 这个View会循环输出班级列表表格,最后一个ActionLink指向StudentClassController的ClassDetails Action,传递参数classId。
这个Action会拿到ClassId取Class信息,放入student List,传递并指向到ClassStudentList View。
2. 右键Views->StudentClass,创建View-> ClassStudentList
View 代码:
@model eStudentDomain.Entity.StudentClass @{ Layout = null;} <!DOCTYPE html> <html><head> <meta name="viewport"content="width=device-width" /> <title>ClassStudentList</title></head><body> <table> <tr> <th> @Html.DisplayNameFor(model=> model.Name) </th> <th></th> </tr> @foreach (var item in Model.Students) { <tr> <td> @Html.DisplayFor(modelItem=> item.Name) </td> </tr> } </table> <p> @Html.ActionLink("Add Student", "GotoCreateStudent","StudentClass", new { classId = Model.Id },null) </p> <p> @Html.ActionLink("Back", "ClassList","StudentClass", null, null); </p></body></html>
代码说明:此View接收一个StudentClass类作为参数,并且循环输出了class里面的student列表。最后ActionLink指向了StudentClass controller的GoToCreateStudent的Action,传递参数 classId。这个Action拿到ClassId传递指向CreateStudent View。
3. 右键StudentClass->添加View->添加CreateStudent View
@using eStudentDomain.Entity@model eStudentDomain.Entity.Student @{ Layout = null;} <!DOCTYPE html> <html><head> <meta name="viewport"content="width=device-width" /> <title>CreateStudent</title></head><body> <scriptsrc="~/Scripts/jquery-1.7.1.min.js"></script> <scriptsrc="~/Scripts/jquery.validate.min.js"></script> <scriptsrc="~/Scripts/jquery.validate.unobtrusive.min.js"></script> @using(Html.BeginForm("CreateStudent","StudentClass",FormMethod.Post)){ @Html.ValidationSummary(true) <fieldset> @Html.HiddenFor(model => model.ClassId); <legend>Student</legend> <div class="editor-label"> @Html.LabelFor(model =>model.Name) </div> <div class="editor-field"> @Html.EditorFor(model =>model.Name) @Html.ValidationMessageFor(model => model.Name) </div> <div class="editor-label"> @Html.LabelFor(model =>model.JoinDate) </div> <div class="editor-field"> @Html.EditorFor(model =>model.JoinDate) @Html.ValidationMessageFor(model => model.JoinDate) </div> <div class="editor-label"> @Html.LabelFor(model =>model.GraduateDate) </div> <div class="editor-field"> @Html.EditorFor(model =>model.GraduateDate) @Html.ValidationMessageFor(model => model.GraduateDate) </div> <p> <inputtype="submit" value="CreateStudent" /> </p> </fieldset> } <div> @Html.ActionLink("Back to List", "ClassDetails","StudentClass", new { classId = Model.ClassId }, null); </div></body></html>
代码说明:
这个View接收Student实体。
@using(Html.BeginForm("CreateStudent","StudentClass",FormMethod.Post)){
表明,这个表单指向StudentClass controller 的CreateStudent Action,表单提交方式为POST。
在CreateStudent Action 里,接收一个Student对象,并限制HTTP请求方式为POST。这里传输序列化协议为JSON,但是mvc已经把这个过程做好了,表单提交后,Model将被序列化为JSON以POST请求提交到服务器,Action接收到的,已经是反序列化好的Student对象了。Action创建对象,返回ClassStudentList View,给一个classId。
最后,放一个ActionLink,返回StudentClass Controller的ClassDetails Action,给一个classId,这个Action里,将取出classId内的students,指向StudentClassList View,给一个StudentClass对象。
View和Controller的代码都做完了,还有DI没做,我们去package manager,安装 structure map。
会看到生成好的 IoC.cs 文件,打开
添加一行(红色)代码即可。
namespaceeStudentManager.DependencyResolution { public static class IoC { public static IContainer Initialize() { ObjectFactory.Initialize(x => { x.Scan(scan => { scan.TheCallingAssembly(); scan.WithDefaultConventions(); }); x.For<IStudentContext>().Use<eStudentDbContext>(); // x.For<IExample>().Use<Example>(); }); return ObjectFactory.Container; } }}
最后,我们可以选择配置一下路由,默认指向ClassList :
好了,这个例子就完成了。运行一下:
Class List :
Student Class
点击Add Student,进入CreateStudent
点击CreateStudent,回到了Class Student:
- Asp.Net MVC系列--基础篇(3)
- Asp.Net MVC 系列--基础篇(2)
- Asp.Net MVC基础
- ASP.NET MVC基础
- ASP.net MVC基础
- ASP.NET MVC 基础
- Asp.net Mvc Framework 系列
- Asp.net Mvc Framework 系列
- ASP.NET MVC Framework 系列
- Asp.net Mvc Framework 系列
- ASP.NET MVC Framework 系列
- ASP.NET MVC 系列文章
- ASP.NET MVC Framework 系列
- ASP.NET MVC系列:Area
- ASP.NET MVC系列:UrlRouting
- Asp.Net MVC4系列---基础篇(4)
- Asp.Net MVC4系列---基础篇(5)
- Asp.Net MVC4 系列--基础篇(1)
- Java中equals与"=="的使用区别
- 图形识别处理技术(C++)
- 把wikipedia中文数据库导入mysql
- 捷豹:演绎完美未来
- iOS程序开发引用的第三方库之间出现冲突的处理方法
- Asp.Net MVC系列--基础篇(3)
- 例程调试出错,不知错哪里??
- 变态级JAVA程序员面试32问
- 捷豹路虎发展背后
- 黑马程序员----java设计模式之装饰设计模式和享元设计模式
- 在Eclipse中使用JUnit4进行单元测试(初级篇)
- [Java]Swing基础编程【4】JFileChooser 和 吉他谱浏览器设想
- “gcc-mingw-w64” package in Ubuntu
- linux epoll和 socket非阻塞读