审视编辑方法和视图

在这一节中,您将审视movie控制器生成的响应方法和视图。然后您将添加

一个自定义搜索页面。

运行程序并通过在URL追加/Moives浏览movie控制器。把鼠标悬停在Edit

链接上,看看它执行的URL.

Edit的链接由视图Views\Movies\Index.cshtmlHtml.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 审视编辑方法和视图相关推荐

  1. Asp.net MVC3.0 入门指南 7.1 展示查找页面

    添加一个查找方法和查找视图 在这一节我们将实现一个SearchIndex响应方法,允许您按流派或名字查找电影. 它利用网址/Movies/SearchIndex.请求将展示一个HTML页面,它包含为了 ...

  2. ASP.NET MVC3 快速入门

    第一节 概述    (2011-02-23 20:57:18)  转载 标签: web应用程序 分类: ASP.NETMVC3 1.1  本教程的学习内容     在本教程中,你将学会如下内容: •  ...

  3. [MVC.NET] Asp.Net MVC3 简单入门第一季

    转自:http://www.cnblogs.com/fly_dragon/archive/2011/10/12/2208042.html 初识Asp.Net MVC2.0 初识Asp.Net MVC2 ...

  4. ASP.NET 2.0入门与提高系列课程(视频课程讲师:徐栋)

    ASP.NET 2.0入门与提高系列课程(1):揭开Orcas神秘的面纱.zip 讲座内容:做为Visual Studio和.NET Framework下一个版本的"Orcas"吊 ...

  5. Asp.Net MVC3.0网站统计登录认证的在线人数

    前言 对于一个网站来说,统计在线人数是一个很重要的工作.平时也发现很多的网站论坛等都有在线人数的显示.对于一个网站如果在线人数很多,用户看到了这么个数字也是很了不起的事情.由于之前对于这个知识点只是知 ...

  6. asp.net mvc3.0安装失败之终极解决方案

    安装失败截图 原因分析 因为vs10先安装了sp1补丁,然后安装的mvc3.0,某些文件被sp1补丁更改,导致"VS10-KB2483190-x86.exe"安装不了,造成安装失败 ...

  7. ASP.NET MVC 5 入门指南汇总

    原文:ASP.NET MVC 5 入门指南汇总 经过前一段时间的翻译和编辑,我们陆续发出12篇ASP.NET MVC 5的入门文章.其中大部分翻译自ASP.NET MVC 5 官方教程,由于本系列文章 ...

  8. Asp.Net Mvc3.0(MEF依赖注入实例)

    前言 在http://www.cnblogs.com/aehyok/p/3386650.html前面一节主要是对MEF进行简单的介绍.本节主要来介绍如何在Asp.Net Mvc3.0中使用MEF. 准 ...

  9. Win7 IIS7 ASP.NET MVC3.0 部署问题

    Win7 IIS7 ASP.NET MVC3.0 部署问题 1.应用程序池采用经典模式,framework4.0.可能存在权限问题,解决办法:在高级设置的标识设为LocalSystem. 一般mvc都 ...

最新文章

  1. 清晰易懂的Numpy入门教程
  2. 谷歌前CEO对“元宇宙”大泼冷水:AI技术是伪神
  3. angularjs 中的$digest和$apply区别
  4. 高级打字机【主席树】【滚动数组】【块状链表】
  5. Unix调试工具dbx使用方法
  6. 对计算机图形学知识总结第二版,计算机图形学入门总结!
  7. CodeForces - 484E Sign on Fence(主席树区间合并+二分)
  8. 使用createObject(createObjectEx)创建silverlight对象
  9. mysql long varchar2_案例:Oracle数据库long查询结果转换为varchar2类型方法的操作步骤...
  10. dev里timeedit控件如何赋值_如何制作高逼格的数据地图(二)
  11. 英特尔® 处理器显卡
  12. Aircrack-ng支持网卡列表(下)
  13. AtomicReference使用场景
  14. 大数据分析技术研究报告(一)
  15. 1253:抓住那头牛
  16. 【程序员修炼日志】校招与社招的感悟
  17. 运用区块链溯源有什么意义呢?
  18. 【小记】LaTex 语法说明
  19. Spring--配置
  20. teradata安装

热门文章

  1. IDC:全球将步入数字经济时代,安全可控成数字经济战略关键词
  2. Linux学习总结(七十四)自动化运维之ansible
  3. MSSQL-Server On Docker
  4. 新增的output元素 progress元素 meter元素 keygen元素
  5. 非NLB网段的客户端无法访问NLB
  6. MyEclipse添加tomcat7出现“Value must be an existing directory”解决方案
  7. MySQLdb不能调用Sql脚本?
  8. delphi OnMouseLeave 事件不灵敏及解决之道
  9. 用vsftp建立个人ftp站点
  10. Windows server 2003 DNS子域与委派管理配置指南