当前位置: 首页 > news >正文

MVC笔记 初识模型(二)

1.在视图中创建窗口,新建一个View视图。添加视图,选中复选框"创建强类型视图"。

      需要输入的地方可以用MVC内置的HTML辅助方法来生成字段;需要显示标题的地方可以用 <%=Html.Label("")%>方法,需要显示文本的地方可以使用 <%=Html.TextBox("")%>方法。

      在MVC中,可以利用Html.BeginForm()辅助方法实现自动输出窗口标识,语法如下:

1     <% using(Html.BeginForm("Save","Guestbook",FormMethod.Post)){ %>
2        窗口内容
3     <%} %>

     或省略第三个参数,因为窗口默认的FormMethod就是"Post",如果 窗口送出的对象是同一个Action,那么也可以将语法简化如下:

1     <% using(Html.BeginForm()){ %>
2        窗口内容
3     <%} %>

      因为送出窗口的对象与当前视图所在的Controller相同,只是Action不同,所以你可以运用一下技巧,通过View的RouteDate.Values对象取得当前的所有路由值,并动态加载路由值中的Controller的名称,示例如下:

1     <% using(Html.BeginForm("Save",RouteData.Values["controller"].ToString())){ %>
2        窗口内容
3     <%} %>

NOTE:   MVC的路由值中包含许多与路由有关的信息,而这些路由的名称在MVC2中只有3个是内置的,分别为controller、action和area。其中,area路由值只有在链接到区域网站时才会有实际值,其他路由值的名称都可以由开发人员自定义(例如id)。自定义的路由值名称都会在Global.asax.cs文件的RegisterRoutes()方法中定义。

2. 通过Action接收窗口数据

    TIP: 要想从视图转回控制器,可以在视图页面的空白处右击鼠标,再在弹出的快捷菜单中选择"转到控制器"即可。返回Guestbook控制器之后,可以利用vs2010的"插入代码段"功能新建一个动作,该功能只支持HTTP POST请求,如图:

完成之后的代码如下:

1  [HttpPost]
2         public ActionResult Save(string name,string Email,string content)
3         {
4             ViewData["name"] = name;
5             ViewData["Email"] = Email;
6             ViewData["content"] = content;
7             return View();
8         }

       从Save()方法所输入的参数来看,此Save()方法输入了3个参数,其参数名称与在Index视图中所使用的窗口字段名称一模一样。为什么通过QueryString()方法或Form()方法传递过来的数据会变成Save()方法的参数呢?因为在MVC中有一个Model Binder(数据模型绑定)机制,通过这个机制可以自动将客户端传过来的数据转换成.NET类型数据,也因为这样,才能直接通过Save()方法的参数取得相关数据。

NOTE: 窗口字段名称是指中的name属性。

     在Save()方法之前应用了一个 [HttpPost]属性,用于告知MVC此动作只会接受 Http Post请求送过来的数据。这个属性有自己的专有名称,叫做动作过滤器(Action Filter)或 动作选择器(Action Selector)。

     启动调试,在浏览器中输入http://localhost:1309/Guestbook,并在留言板中输入信息,发现提交查询后,信息都保存在了save中。确认窗口能够通过Action来接收之后,再将数据写入数据库。前面已经将Entity Framwork创建了一个数据模型,下面可以用该模型来讲数据希尔数据库。Save动作编写完成后的程序代码如下:

 

 1 [HttpPost]
 2         public ActionResult Save(string name,string Email,string content)
 3         {
 4             MvcApplication1.Models.GuestbookEntities db = new Models.GuestbookEntities();
 5 
 6             db.AddTo 留言板(new Models.留言板()
 7             {
 8                name =name,
 9                Email=Email,
10                content=content,
11                dtime=DateTime.Now
12 
13             });
14 
15             db.SaveChanges();
16             ViewData["name"] = name;
17             ViewData["Email"] = Email;
18             ViewData["content"] = content;
19 
20             return View();
21         }

 

我们要在Guestbook/Index中完成"显示所有留言"的功能,修改Guestbook中的Index()方法代码如下:

1  public ActionResult Index()
2         {
3             MvcApplication1.Models.GuestbookEntities db = new Models.GuestbookEntities();
4             var data = db.留言板;
5             return View(data);//输入View()的第一个参数就是要给View使用的Model数据
6         }

NOTE : 输入Model的数据不能为string类,否则会被当成视图名称来处理。

TIP: 如果你的项目从来没有生成过,在你的"视图数据类型"下拉表中找不到你要的数据类型。如果你的Entity Framework或LINQ to SQL模型已经更新,也千万要进行生成(Build)操作后在执行"加入视图"动作,这样才能在"视图数据类型"下拉列表中看到你需要的数据类型。

      为了方便操作,我们新添加一个留言板视图。新建操作完成后,稍微调整一下页面,完成后代码如下。

 

 1 <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcApplication1.Models.LogOnModel>>" %>
 2 
 3 <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
 4     显示留言
 5 </asp:Content>
 6 <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
 7     <h2>显示留言</h2>
 8     <table>
 9         <tr>
10             <th></th>
11             <th>
12                 姓名
13             </th>
14             <th>
15                 Email
16             </th>
17             <th>
18                 内容
19             </th>
20             <th>
21                建立时间
22             </th>
23         </tr>
24 
25     <% foreach (var item in Model) { %>
26     
27         <tr>
28             <td>
29                 <%: item.UserName %>
30             </td>
31             <td>
32                 <%: item.Email %>
33             </td>
34             <td>
35                 <%=Html.Encode(item.Content).Replace("\r\n","<br/>\r\n") %>
36             </td>
37             <td>
38                <%:String.Format("{0:g}",item.time) %>
39             </td>
40         </tr>
41     
42     <% } %>
43     </table>
44     <p>
45         <%: Html.ActionLink("留下足迹", "Write") %>
46     </p>
47 </asp:Content>

 

 

 

 

 

转载于:https://www.cnblogs.com/Eleanore/archive/2012/11/20/2778792.html

相关文章:

  • android 手机网络接入点名称及WAP、NET模式的区别
  • 金蝶osf接口开发_金蝶云·星辰 | ?小微企业服务成长平台
  • 小程序商店刷榜_怎么注册微信小程序商店
  • 中getname_【136期】你能谈谈Java中 synchronized 对象锁和类锁的区别
  • 加到service中无效_给 COLA 做减法:应用架构中的“弯弯绕设计”
  • set集合 结构体_Swift - 集合(Set)使用详解(附样例)
  • 前端动态获取servlet虚拟路径_Servlet 过滤器和异常处理
  • access中下划线是font_Python中的模块及扩展库
  • mac vs 返回上一步_Figma:使用mac上的字体 | 转换ttc字体文件
  • cmd 访问url_「图解」创建第一个django应用、配置并访问
  • 周星驰经典超清图片_周星驰与刘德华究竟谁更火?为何30年没合作?看王晶的评价...
  • python小老鼠编程_江门Python技能学习价格实惠,python数组学习价格表
  • android layoutinflater获取的textview无法改变值_Android 值得深入思考的几个面试问答分享...
  • gmat模考_GMAT模考成绩不太准原因大盘点
  • 杂牌平板mt6797_10核时代到来 全网通联发科MT6797发布
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • canvas绘制圆角头像
  • C学习-枚举(九)
  • Git初体验
  • Javascript设计模式学习之Observer(观察者)模式
  • java小心机(3)| 浅析finalize()
  • Lucene解析 - 基本概念
  • mockjs让前端开发独立于后端
  • PAT A1017 优先队列
  • PV统计优化设计
  • 编写高质量JavaScript代码之并发
  • 从零开始的无人驾驶 1
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 如何编写一个可升级的智能合约
  • 主流的CSS水平和垂直居中技术大全
  • ​虚拟化系列介绍(十)
  • ###C语言程序设计-----C语言学习(3)#
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (1)(1.13) SiK无线电高级配置(六)
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (万字长文)Spring的核心知识尽揽其中
  • (五)MySQL的备份及恢复
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)Linq学习笔记
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET 事件模型教程(二)