Asp.net MVC3.0 入门指南 6 审视编辑方法和视图
审视编辑方法和视图
在这一节中,您将审视movie控制器生成的响应方法和视图。然后您将添加
一个自定义搜索页面。
运行程序并通过在URL追加/Moives浏览movie控制器。把鼠标悬停在Edit
链接上,看看它执行的URL.
Edit的链接由视图Views\Movies\Index.cshtml 的Html.ActionLink方法生成。
@Html.ActionLink("Edit", "Edit", new { id=item.ID })
Html对象是一个助手,它是WebViewPage
基类暴露的属性。助手的ActionLink方法可以很容易的生成
HTML超级链接,它指向控制器的响应方法。ActionLink的第一个参数超级链接的文本呈现(比如:
<a>Edit Me</a>),第二个参数是要调用的响应方法的名称,最后一个参数生成路由数据的匿名对象
(anonymous object,这里指ID=4)。
您可以使用查询字符串(query string)传递参数给响应方法。比如URL
http://localhost:xxxxx/Movies/Edit?ID=4传递ID=4给Movies控制器的Edit方法。
打开Movies控制器。有两个Edit方法,如下所示:
//
// GET: /Movies/Edit/5public ActionResult Edit(int id)
{Movie movie = db.Movies.Find(id);return View(movie);
}//
// POST: /Movies/Edit/5[HttpPost]
public ActionResult Edit(Movie movie)
{if (ModelState.IsValid) {db.Entry(movie).State = EntityState.Modified;db.SaveChanges();return RedirectToAction("Index");}return View(movie);
}
注意第二个Edit方法前面是HttpPost
属性。它表明这个重载的Edit方法只能被POST
请求调用。您也可以给第一个Edit方法采用HttpGet属性,但是这不是必须的,应为
方法默认为HttpGet(响应方法隐含的了HttpGet属性将被认为是HttpGet方法)。
HttpGet方法将电影的ID作为参数,并使用实体框架的Find方法查找电影,然后返回被找
到的电影给视图模板。当架构体系创建编辑模板是,它检查Movie类并为每个属性生成
代码去呈现<label><input>元素。下面的代码展示了自动生成的Edit视图模板:
@model MvcMovie.Models.Movie@{ViewBag.Title = "Edit";
}<h2>Edit</h2><script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>@using (Html.BeginForm()) {@Html.ValidationSummary(true)<fieldset><legend>Movie</legend>@Html.HiddenFor(model => model.ID)<div class="editor-label">@Html.LabelFor(model => model.Title)</div><div class="editor-field">@Html.EditorFor(model => model.Title)@Html.ValidationMessageFor(model => model.Title)</div><div class="editor-label">@Html.LabelFor(model => model.ReleaseDate)</div><div class="editor-field">@Html.EditorFor(model => model.ReleaseDate)@Html.ValidationMessageFor(model => model.ReleaseDate)</div><div class="editor-label">@Html.LabelFor(model => model.Genre)</div><div class="editor-field">@Html.EditorFor(model => model.Genre)@Html.ValidationMessageFor(model => model.Genre)</div><div class="editor-label">@Html.LabelFor(model => model.Price)</div><div class="editor-field">@Html.EditorFor(model => model.Price)@Html.ValidationMessageFor(model => model.Price)</div><p><input type="submit" value="Save" /></p></fieldset>
}<div>@Html.ActionLink("Back to List", "Index")
</div>
<form>中的<input>元素别用来回传页面到电影的编辑地址/Movies/Edit。
当点击Edit按钮时,页面的数据被回传到服务器。
处理POST请求
由架构体系生成的属性为HttpGet的Edit方法没有检查传给它的ID的有效性。
如果用户删除URL的ID片段,错误信息如下所示:
用户还可以传递一个不存在的ID,比如:http://localhost:xxxxx/Movies/Edit/1234.您可以给
HttpGet Edit方法做两点修改来限制URL。首先,把ID参数改为默认值为0 (id不是必须传递)。
您也可以在回传电影对象给视图模板之前,检查Find方法是否真正的找到了电影信息。
public ActionResult Edit(int id = 0)
{Movie movie = db.Movies.Find(id);if (movie == null){return HttpNotFound();}return View(movie);
}
如果没有找到,HttpNotFound方法被调用。
所有的HttpGet方法都遵循类似的模式。它们获取一个电影对象(在Index中返回对象列表),
然后传递模型给视图。Create方法传递一个空电影对象给Create视图。所有的方法(创建、
编辑、删除)都有一个HttpPost的重载方法。
在HTTP GET方法中修改数据存在安全风险,在博客
ASP.NET MVC Tip #46 – Don’t use Delete Links because they create Security Holes
中有描述。
在HTTP GET方法中修改数据违反了HTTP的最佳实践和
REST架构模式(其中规定,
GET请求不应改变应用程序状态)。换句话,执行GET操作应该是一个无副
作用的安全操作。
下一节:Asp.net MVC3.0 入门指南 7 展示查找页面
原文网址:http://www.asp.net/mvc/tutorials/getting-started-with-mvc3-part6-cs
转载于:https://www.cnblogs.com/BingoLee/archive/2011/05/13/2045315.html
Asp.net MVC3.0 入门指南 6 审视编辑方法和视图相关推荐
- Asp.net MVC3.0 入门指南 7.1 展示查找页面
添加一个查找方法和查找视图 在这一节我们将实现一个SearchIndex响应方法,允许您按流派或名字查找电影. 它利用网址/Movies/SearchIndex.请求将展示一个HTML页面,它包含为了 ...
- ASP.NET MVC3 快速入门
第一节 概述 (2011-02-23 20:57:18) 转载 标签: web应用程序 分类: ASP.NETMVC3 1.1 本教程的学习内容 在本教程中,你将学会如下内容: • ...
- [MVC.NET] Asp.Net MVC3 简单入门第一季
转自:http://www.cnblogs.com/fly_dragon/archive/2011/10/12/2208042.html 初识Asp.Net MVC2.0 初识Asp.Net MVC2 ...
- ASP.NET 2.0入门与提高系列课程(视频课程讲师:徐栋)
ASP.NET 2.0入门与提高系列课程(1):揭开Orcas神秘的面纱.zip 讲座内容:做为Visual Studio和.NET Framework下一个版本的"Orcas"吊 ...
- Asp.Net MVC3.0网站统计登录认证的在线人数
前言 对于一个网站来说,统计在线人数是一个很重要的工作.平时也发现很多的网站论坛等都有在线人数的显示.对于一个网站如果在线人数很多,用户看到了这么个数字也是很了不起的事情.由于之前对于这个知识点只是知 ...
- asp.net mvc3.0安装失败之终极解决方案
安装失败截图 原因分析 因为vs10先安装了sp1补丁,然后安装的mvc3.0,某些文件被sp1补丁更改,导致"VS10-KB2483190-x86.exe"安装不了,造成安装失败 ...
- ASP.NET MVC 5 入门指南汇总
原文:ASP.NET MVC 5 入门指南汇总 经过前一段时间的翻译和编辑,我们陆续发出12篇ASP.NET MVC 5的入门文章.其中大部分翻译自ASP.NET MVC 5 官方教程,由于本系列文章 ...
- Asp.Net Mvc3.0(MEF依赖注入实例)
前言 在http://www.cnblogs.com/aehyok/p/3386650.html前面一节主要是对MEF进行简单的介绍.本节主要来介绍如何在Asp.Net Mvc3.0中使用MEF. 准 ...
- Win7 IIS7 ASP.NET MVC3.0 部署问题
Win7 IIS7 ASP.NET MVC3.0 部署问题 1.应用程序池采用经典模式,framework4.0.可能存在权限问题,解决办法:在高级设置的标识设为LocalSystem. 一般mvc都 ...
最新文章
- 清晰易懂的Numpy入门教程
- 谷歌前CEO对“元宇宙”大泼冷水:AI技术是伪神
- angularjs 中的$digest和$apply区别
- 高级打字机【主席树】【滚动数组】【块状链表】
- Unix调试工具dbx使用方法
- 对计算机图形学知识总结第二版,计算机图形学入门总结!
- CodeForces - 484E Sign on Fence(主席树区间合并+二分)
- 使用createObject(createObjectEx)创建silverlight对象
- mysql long varchar2_案例:Oracle数据库long查询结果转换为varchar2类型方法的操作步骤...
- dev里timeedit控件如何赋值_如何制作高逼格的数据地图(二)
- 英特尔® 处理器显卡
- Aircrack-ng支持网卡列表(下)
- AtomicReference使用场景
- 大数据分析技术研究报告(一)
- 1253:抓住那头牛
- 【程序员修炼日志】校招与社招的感悟
- 运用区块链溯源有什么意义呢?
- 【小记】LaTex 语法说明
- Spring--配置
- teradata安装
热门文章
- IDC:全球将步入数字经济时代,安全可控成数字经济战略关键词
- Linux学习总结(七十四)自动化运维之ansible
- MSSQL-Server On Docker
- 新增的output元素 progress元素 meter元素 keygen元素
- 非NLB网段的客户端无法访问NLB
- MyEclipse添加tomcat7出现“Value must be an existing directory”解决方案
- MySQLdb不能调用Sql脚本?
- delphi OnMouseLeave 事件不灵敏及解决之道
- 用vsftp建立个人ftp站点
- Windows server 2003 DNS子域与委派管理配置指南