ASP.NET MVC轻教程 Step By Step 7——改进Write动作方法
在上一节我们使用强类型视图改进Write视图获得更好的智能感知和代码重构,现在可以进一步的改进动作方法。
Step 1. 数据模型绑定
在Save方法中我们使用Request来获取表单传送的值,其实可以将值作为Save的参数传递过来。
public void Save(string nickname,string content)
{
messages.Add(new Message { NickName = nickname, Content = content, ReleaseDate = DateTime.Now });
Response.Redirect("/Home/Index");
}
注意参数名称和Write视图生成渲染的HTML的标签的name属性值要一致,由于HTML不区分大小写,所以这里的参数名的大小写也无所谓。ASP.NET MVC会自动把QueryString或Form获取的值以name值和参数名对应的方式传递。
不过更好的做法是把Message类的对象作为参数传递过来。如下代码所示。
public void Save(Message message)
{
message.ReleaseDate = DateTime.Now;
messages.Add(message);
Response.Redirect("/Home/Index");
}
我们可以这样做是因为ASP.NET MVC中有一个Model Binder(数据模型绑定)机制,它会自动将通过QueryString或Form获取的name和值重建成一个模型类对象,并传递给动作方法。这样做的优点依然和强类型视图类似,主要是有智能感知和代码重构时比较方便。
Step 2. 动作方法的特性
Write方法负责显示渲染表单,Save方法负责处理表单传递的数据。这样的做法在ASP和php中都很常见,不过每个不同的表单都有不同名称的动作方法,会显得繁琐不够清晰。最好可以使用一个名字,当然不能直接写成两个Write动作方法,不然就会因为重名发生错误。我们可以给动作方法加上特性来区别两个Write。
[HttpGet]
public ActionResult Write()
{
return View();
} [HttpPost]
public void Write(Message message)
{
message.ReleaseDate = DateTime.Now;
messages.Add(message);
Response.Redirect("/Home/Index");
}
把Save方法名改成Write,并在两个Write动作方法前分别加上HttpGet和HttpPost特性。前者指定在有人访问页面的时候显示页面,后者是当表单以Post提交的时候处理请求,这样就不会发生歧义了。
ASP.NET MVC轻教程 Step By Step 7——改进Write动作方法的更多相关文章
- ASP.NET MVC轻教程 Step By Step 1 ——入门
使用ASP.NET MVC有一段时间了,本人还是非常喜欢ASP.NET MVC这个框架模式的.在经历了WebForm复杂粗暴的做法后,自然感觉简洁优雅的MVC清新可人,只不过WebForm和MVC的设 ...
- ASP.NET MVC轻教程 Step By Step 8——路由
在前面的教程里,细心的你可能会有个疑问,就是地址栏输入/Home/Write就可以进入留言页面.无论是静态HTML还是ASP/ASP.NET.PHP,URL都是和某个页面相关.比如假设有个URL是“w ...
- ASP.NET MVC轻教程 Step By Step 13——页面布局
一般在一个网站中页面会使用相同的结构和元素,如果每个页面都要重复添加这些元素,不仅繁琐更会给我们后期维护带来大麻烦.所以我们采用网页模板之类的技术,将固定不变的元素放入模板,同时留下一些占位符供页面各 ...
- ASP.NET MVC轻教程 Step By Step 12——客户端验证
前面两节使用的两种数据验证方法都是在服务器端进行的,也就是提交了表单,数据回传给服务器才能验证.这样会带来两个问题,一是用户体验不好,用户提交了表单之后才知道存在问题:二是会给服务器带来额外的压力.我 ...
- ASP.NET MVC轻教程 Step By Step 9——分页
现在我们要把Index视图的留言信息进行分页显示. Step 1. 创建路由 我们希望以类似地址http://localhost:41583/Page1来表示第一页,Page2表示第二页,以此类推.在 ...
- ASP.NET MVC轻教程 Step By Step 6——改进表单
上一节我们使用原始的HTML表单来完成留言功能,但是ASP.NET MVC提供了丰富的HTML辅助方法来帮助我们构建更简洁优雅的表单. Step 1. 修改Form标签 首先,我们可以使用Html.B ...
- ASP.NET MVC轻教程 Step By Step 2 ——View初探
在上一节我们完成了一个最简化的MVC程序,最重要的是下面这段代码. public class HomeController : Controller { public string Index() { ...
- ASP.NET MVC轻教程 Step By Step 4——Model、View和Controller
ASP.NET MVC中的Model(数据模型)主要包括定义数据结构.数据库读写.数据验证等等和对象处理相关的工作. 在解决方案资源管理器中找到Model文件夹,点击右键,添加一个新类,名为“Mess ...
- ASP.NET MVC轻教程 Step By Step 5——初识表单
上一节我们将留言列表显示在Index视图里了,现在该添加一个留言的表单,好让用户自己添加留言. 首先在HomeController中添加一个名为“Write”的动作方法. public ActionR ...
随机推荐
- Http(2)
1.传递的请求参数如何获取 GET方式: 参数放在URI后面 POST方式: 参数放在实体内容中 核心的API: request.getParameter("参数名"); 根据参 ...
- iBatis自动生成的主键 (Oracle,MS Sql Server,MySQL)【转】
iBatis的sqlMap配置文件的selectKey元素有个type属性,可以指定pre或者post表示前生成(pre)还是后生成(post). Oracle设置 <!-- Oracle SE ...
- FastDFS、nginx配置手记
第一部分 FastDFS介绍 1.FastDFS是什么 FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux.FreeBSD.AIX等UNIX系统.它只能 ...
- Tomcat优化参数
JAVA_OPTS="-Xmx400m -Xms400m -XX:PermSize=128m -XX:MaxPermSize=400m -XX:+UseG1GC -XX:MaxGCPause ...
- Upstart概述引导方法事件驱动的任务和服务
/********************************************************************* * Author : Samson * Date ...
- apache kafka技术分享系列(目录索引)--转载
原文地址:http://blog.csdn.net/lizhitao/article/details/39499283 kafka开发与管理: 1)apache kafka消息服务 2)kafak安装 ...
- value must be omitted for boolean attributes
jsx文件中 html5一些标签的属性是boolean的,<div hidden="true">是不被允许的,要改成<div hidden>或<div ...
- Mysql中int(1)的误解及说明
在mysql中使用int相关的数据类型时, 如果不太了解其存储方式, 会产生一些误用的情况. 如: 只保存0-9之间的数字, 可能会直接用int(1). 习惯性的以为int(1)就相当于varchar ...
- Asp.net简单三层+Sqllite 增删改查
新建项目à新建一个空白解决方案 在Model新建一个实体类 using System; using System.Collections.Generic; using System.Linq; usi ...
- Node.js + Express + Mongodb 开发搭建个人网站(二)
二.路由 1.打开 routes/index.js ,这个意思就是 捕获到访问主页的get请求: 并通过 app.js 分配到对应的路由里: 看到这里,打开 http://127.0.0.1:300 ...