Asp.Net MVC4.0 官方教程 入门指南之六--查看Edit方法和Edit视图

ASP.NET MVC入门——检查 Edit 方法和编辑视图 在本部分中,你将检查电影控制器的生成的 Edit 操作方法和视图。 但首先我们要 diversion,使发布日期看起来更好。 打开 Models\Movie.cs 文件,并添加以下突出显示的行: using System; using System.ComponentModel.DataAnnotations; using System.Data.Entity; namespace MvcMovie.Models { public class Movie { publi 阅读详情

在这节课程中,你将查看为影片控制器生成的方法和视图。

运行程序,在浏览器中访问/Movies。鼠标悬停在影片列表某条记录的Edit链接上方,会看到链接类似于http://localhost:5279/Movies/Edit/1。

Edit的链接是由Views\Movies\Index.cshtml文件中的Html.ActionLink方法生成的,如下所示:@Html.ActionLink("Edit", "Edit", new { id=item.ID })

Html对象是System.Web.Mvc.WebViewPage基类暴露出来的一个属性,作为助手来使用。助手的ActionLink方法令动态生成与控制器中的方法关联的HTML超链接变得容易。ActionLink的第一个参数是显示的文本(例如,<a>编辑</a>)。第二个参数是要调用的方法名。最后一个参数是生成的匿名路由数据对象(在这个例子中,是指值为1的ID)。

在上面生成的链接地址是http://localhost:5279/Movies/Edit/1。默认路由(在App_Start\RouteConfig.cs中创建)解析URL的模式为{controller}/{action}/{id}。因此,ASP.NET将http://localhost:5279/Movies/Edit/1转换成Movies控制器的Edit方法的请求,并携带一个值为1参数ID。在App_Start\RouteConfig.cs文件中查看以下代码:

复制代码
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
复制代码

你也可以使用查询字符串来传递方法参数。例如,http://localhost:5279/Movies/Edit?ID=1同样传递值为1的ID参数给Movies控制器的Edit方法。

打开Movies控制器文件。两个Edit方法如下所示:

复制代码
        //
        // GET: /Movies/Edit/5
        public ActionResult Edit(int id = 0)
        {
            Movie movie = db.Movies.Find(id);
            if (movie == null)
            {
                return HttpNotFound();
            }
            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请求时被调用。你可以将HttpGet属性应用在第一个Edit方法,但那不是必须的,因为它是默认的。(我们将为HttpGet方法隐性地指定HttpGet属性)。
HttpGet属性的Edit方法获取影片ID参数,使用Entity Framework的Find方法查找影片,并返回选中的影片给Edit视图。当Edit方法被调用时没有参数传入时,ID参数指定0作为默认值。当无法找到影片时,返回HttpNotFound。当脚手架系统创建Edit视图时,查看Movie类并为该类的每个属性创建<label>和<input>元素。下面的例子展示了生成的Edit视图:

复制代码
@model MvcMovie.Models.Movie

@{
    ViewBag.Title = "Edit";
}

<h2>Edit</h2>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>Movie</legend>

        @Html.HiddenFor(model => model.ID)

        <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.Genra)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Genra)
            @Html.ValidationMessageFor(model => model.Genra)
        </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>

        <div class="editor-label">
            @Html.LabelFor(model => model.Date)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Date)
            @Html.ValidationMessageFor(model => model.Date)
        </div>

        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
复制代码

注意该视图模板在文件顶部有@model MvcMovie.Models.Movie语句--指定了视图期望的模型是Movie类型。
脚手架代码使用几个Helper方法来生成流式的Html标记。Html.LabelFor显示字段名称(片名、价格、风格等)。Html.EditorFor生成<input>元素。Html.ValidationMessageFor展示与属性关联的验证信息。
运行程序,导航到/Movies 地址。点击Edit超链接。在浏览器中查看页面源代码。表单元素的Html源码如下所示:

复制代码
<!DOCTYPE html>
<html lang="zh">
    <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <meta charset="utf-8" />
        <title>Edit - 电影应用程序</title>
        <link href="/favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <meta name="viewport" content="width=device-width" />
        <link href="/Content/site.css" rel="stylesheet"/>

        <script src="/Scripts/modernizr-2.5.3.js"></script>

    </head>
    <body>
        <header>
            <div class="content-wrapper">
                <div class="float-left">
                    <p class="site-title"><a href="/">MVC 电影</a></p>
                </div>
                <div class="float-right">
                    <section id="login">
                            <ul>
        <li><a href="/Account/Register" id="registerLink">注册</a></li>
        <li><a href="/Account/Login" id="loginLink">登录</a></li>
    </ul>

                    </section>
                    <nav>
                        <ul id="menu">
                            <li><a href="/">主页</a></li>
                            <li><a href="/Home/About">关于</a></li>
                            <li><a href="/Home/Contact">联系方式</a></li>
                        </ul>
                    </nav>
                </div>
            </div>
        </header>
        <div id="body">
            
            <section class="content-wrapper main-content clear-fix">
                

<h2>Edit</h2>

<form action="/Movies/Edit/1" method="post">    <fieldset>
        <legend>Movie</legend>

        <input data-val="true" data-val-number="字段 ID 必须是一个数字。" data-val-required="ID 字段是必需的。" id="ID" name="ID" type="hidden" value="1" />

        <div class="editor-label">
            <label for="Name">Name</label>
        </div>
        <div class="editor-field">
            <input class="text-box single-line" id="Name" name="Name" type="text" value="少年派的奇幻之旅" />
            <span class="field-validation-valid" data-valmsg-for="Name" data-valmsg-replace="true"></span>
        </div>

        <div class="editor-label">
            <label for="Genra">Genra</label>
        </div>
        <div class="editor-field">
            <input class="text-box single-line" id="Genra" name="Genra" type="text" value="冒险" />
            <span class="field-validation-valid" data-valmsg-for="Genra" data-valmsg-replace="true"></span>
        </div>

        <div class="editor-label">
            <label for="Price">Price</label>
        </div>
        <div class="editor-field">
            <input class="text-box single-line" data-val="true" data-val-number="字段 Price 必须是一个数字。" data-val-required="Price 字段是必需的。" id="Price" name="Price" type="text" value="60.96" />
            <span class="field-validation-valid" data-valmsg-for="Price" data-valmsg-replace="true"></span>
        </div>

        <div class="editor-label">
            <label for="Date">Date</label>
        </div>
        <div class="editor-field">
            <input class="text-box single-line" data-val="true" data-val-date="字段 Date 必须是日期。" data-val-required="Date 字段是必需的。" id="Date" name="Date" type="datetime" value="2012/12/5 0:00:00" />
            <span class="field-validation-valid" data-valmsg-for="Date" data-valmsg-replace="true"></span>
        </div>

        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
</form>
<div>
    <a href="/Movies">Back to List</a>
</div>


            </section>
        </div>
        <footer>
            <div class="content-wrapper">
                <div class="float-left">
                    <p>&copy; 2012 - 我的 ASP.NET MVC 应用程序</p>
                </div>
            </div>
        </footer>

        <script src="/Scripts/jquery-1.7.1.js"></script>

        
    <script src="/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>


    </body>
</html>
复制代码


包含<input>元素的HTML <form> 元素的action属性设置为/Movies/Edit ,方法为post。点击Edit按钮,表单数据将被post到服务器。
处理Post请求

下面列表显示了处理HttpPost请求版本的Edit方法

复制代码
        //
        // 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);
        }
复制代码

ASP.NET MVC模型绑定机制获取post表单值,创建Movie对象作为参数。ModelState.IsValid方法验证表单提交的数据可以用来修改(编辑或更新)Movie对象。如果数据有效,则影片数据将被保存到MovieDbContext实例集合中。新的影片数据在调用MovieDbContext的SaveChanges时保存到数据库。保存完数据后,代码引导用户到MoviesController 的Index方法,在那展示包括刚刚修改的影片在内的影片集合。
如果post的数据无效,将在表单中重新显示。Edit.cshtml视图模板中的Html.ValidationMessageFor助手负责显示错误信息。

译者注:原文在该部分有大量篇幅提示在非英语母语国家,使用逗号来替代货币中的小数点,来实现JQuery正确验证数据的目的,与主题无关,在此做删节处理,有兴趣的可以阅读英文原文。

所有的HttpGet方法遵循相似的模式。获取一个movie对象(或者对象集合,比如在Index例子中),从模型传递到视图。Create方法传递空对象给Create视图。创建、编辑、删除或者修改数据等所有操作放在HttpPost重载方法中。在HttpGet方法中修改数据存在安全隐患,详细信息请查看ASP.NET MVC Tip #46 – Don’t use Delete Links because they create Security Holes。在Get方法中修改数据同样违法Http最佳实践以及Rest模式(指定Get请求不应当变更你的应用程序状态)。换句话说,执行Get操作应该是一个不影响以及不会修改此前数据的安全操作。



译文地址: http://www.cnblogs.com/seawaving/archive/2012/12/05/2804100.html


欢迎加入.net技术交流群.Net技术交流


asp.net mvc add edit delete asp.net mvc add edit delete asp.net mvc add edit delete asp.net mvc add edit delete 立即下载

相关推荐

[RK3588-Android12] 深入解析USB Type-C PD充电功能的DTS配置与内核驱动修改

本文深入探讨了在RK3588 Android12平台上禁用USB Type-C PD充电功能的实现方法。通过分析设备树(DTS)配置与内核驱动(TCPM框架)的联动修改,详细解读了如何通过添加`pd-disable`属性及修改`tcpm.c`驱动代码,使Type-C端口绕过PD协议协商,仅工作在传统电源模式,以满足工控等特定场景对供电稳定性和成本控制的需求。

9o8p7i6u5y的博客 994

ASP.NET MVC入门

ASP.NET MVC入门 (作者:张米,撰写时间:2019年4月15日) 1、什么是mvc? Mvc是Model View Controller的缩写,是软件工程中的一种设计模式(很多编程语言中都存在这种模式)。 Model是模...

weixin_44582939的博客 721

树莓派4B+红外传感器:手把手教你DIY一个能走黑线的智能小车(Python代码全解析)

本文详细介绍了如何使用树莓派4B和红外传感器DIY一个智能循迹小车,包括硬件配置、GPIO连接、Python代码实现及优化算法。通过动态PWM调速、状态机设计和赛道记忆算法,提升小车的循迹性能和稳定性。适合初学者和电子爱好者动手实践。

weixin_29188043的博客 269

ASP.NET MVC入门基础

ASP.NET MVC入门基础 开发工具与关键技术:Visual Studio 2015 作者:大珊珊 撰写时间:2019.4.6 ASP.NET MVC 前言 首先让我们简单的了解一下ASP.NET MVC。它是 ASP .NET 编程模式中的其中一种。MVC全名为Model View Controller,...

weixin_44543331的博客 861

多目标优化权衡分析:从 Pareto 前沿到 3 种量化指标(相关系数/膝点/理想点)

本文深入探讨多目标优化中的权衡分析,介绍从Pareto前沿到三种量化指标(相关系数、膝点、理想点)的实用方法。通过Python代码示例和对比分析,帮助读者在工程设计、投资组合等场景中有效评估目标间的Trade-off关系,实现科学决策。

weixin_29032337的博客 393

运放实现阶梯波发生器-总结报告

实验目的: 学习、理解、掌握方波电路、限幅电路积分累加电路、反馈电路 课程条件: 电脑仿真软件Multisim 原理框图和实验思路: 方波电路通过微分电路可以形成正负脉冲,在通过限幅电路后变为单脉冲,最后在积分电路中形成阶梯波。微分电路存在的意义就是为了防止方波频率过大,从而导致在经过限幅电路的方波,在一个周期内将电容的电充满,这样就不会产生阶梯波。如果方波的频率比较小,可以近似认为是正负脉冲,这样就可以跳过微分电路。 ...............

0 1万+

ASP.NET MVC 快速入门(图文版)

MVC是当前比较流行的WEB程序开发模式之一,ASP.NET MVC是.Net对MVC的一种实现。MVC(Model View Controller 模型-视图-控制器)具体如下所示:Model(模型)表示应用程序核心(比如数据库记录列表)。View(视图)显示数据(数据库记录)。Controller(控制器)处理输入(写入数据库记录)。

白开水 3362

120、ISP 驱动架构解析:从 V4L2 请求到 ISP 硬件的配置下发流程

本文以实际案例解析ISP驱动架构的V4L2到硬件配置下发流程。作者通过一个因内存共享导致画面闪烁的bug案例,详细剖析了用户空间参数通过V4L2结构体传递、驱动层拆包与硬件寄存器映射、时序同步机制等关键环节。特别强调深拷贝、dirty flag增量更新、shadow register等实现要点,并给出多路并发隔离、寄存器写入失败等典型问题的排查方法。文章建议开发者深入理解参数到寄存器的转换过程,推荐通过debugfs实时监控寄存器状态,避免过度依赖自动调试工具。全文以实践为导向,对ISP驱动开发具有直接指导

sundong_81的博客 159

【ASP.NET MVC】MVC基础入门

MVC开始是存在于桌面程序中的,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。比如一批统计数据可以分别用柱状图、饼图来表示。C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新。

qq_42222127的博客 2027

微信小程序|基于小程序+云开发制作一个租房小程序

经济发展的同时伴随着大批人群的流动,租房需求一直是持久不衰的话题,如何租好房,好租房,跟随此文一起制作一个租房小程序,让租房不再困难。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 4930

大数据安全 | 期末复习(上)| 补档

大数据定义:无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

知识库搭建ing 2589

域控制器开发五大关键挑战:从硬件设计到软硬件联调的实战避坑

在汽车电子与嵌入式系统领域,随着智能座舱、自动驾驶等场景的普及,域控制器已成为新一代电子架构的核心单元。它本质上是一台高性能小型计算机,需要同时处理多路高速信号、复杂电源树、操作系统运行以及跨域通信。从硬件设计角度看,供电架构、DDR4高速电路、MCU与SoC混合架构都直接影响系统稳定性;从软件工程角度看,系统镜像集成、版本管理与启动优化同样决定量产质量。而硬件与软件的联调,更是将理论设计推向真实工程落地的关键环节。本文聚焦域控制器项目中最典型的五大挑战,结合供电时序、信号完整性、安全岛设计、构建追溯体系及

weixin_34006468的博客 415

PyTorch 面试题及参考答案(精选100道)

模块是 PyTorch 中用于自动求导的核心模块。它为张量上的所有操作提供了自动求导的功能。在深度学习中,反向传播是一种用于计算损失函数相对于模型参数的梯度的算法。通过梯度,我们可以使用优化算法(如随机梯度下降)来更新模型的参数,从而最小化损失函数。模块的主要作用就是自动计算这些梯度。当我们创建一个张量时,如果将其属性设置为True,那么 PyTorch 会跟踪该张量上的所有操作。在完成前向传播计算出损失函数后,调用方法,模块会自动根据链式法则反向传播计算出所有需要求导的张量的梯度。

大模型大数据攻城狮的专栏 1681

【MVC5】7.检查Edit方法和Edit视图

在本节中,您将检查所生成的Edit操作方法和movie controller的视图。但首先需要采取一个简短的更改,使发布日期看起来更好。打开Models\Movie.cs文件并修改为下面代码: using System; using System.ComponentModel.DataAnnotations; using System.Data.Entity; namespac

VIProgram的博客 2168

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

APS.NET_MVC5学习笔记-验证编辑方法(Edit method)和编辑视图(Edit view)

在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图。但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好。打开Models \ Movie.cs文件,并添加高亮行如下所示: using System; using System.ComponentModel.DataAnnotations; using System.Dat

Programmer_XiaoLin 1551

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Asp.Net MVC4.0学习之六--查看Edit方法和Edit视图

在这节课程中,你将查看为影片控制器生成的方法和视图。 运行程序,在浏览器中访问/Movies。鼠标悬停在影片列表某条记录的Edit链接上方,会看到链接类似于http://localhost:5279/Movies/Edit/1。 Edit的链接是由Views\Movies\Index.cshtml文件中的Html.ActionLink方法生成的,如下所示:@Html.ActionLin

lanse_my的专栏 1463

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ASP.NET MVC 入门(六)——查看Edit方法和Edit视图

在这节课程中,你将查看为影片控制器生成的方法和视图。 运行程序,在浏览器中访问/Movies。鼠标悬停在影片列表某条记录的Edit链接上方,会看到链接类似于http://localhost:5279/Movies/Edit/1。 Edit的链接是由Views\Movies\Index.cshtml文件中的Html.ActionLink方法生成的,如下所示:@Html.ActionLin

zhangemails的专栏 660

ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)

在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图。但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好。打开Models \ Movie.cs文件,并添加高亮行如下所示: using System; using System.ComponentModel.DataAnnotations; using Sys...

476

Asp.Net MVC4.0 官方教程 入门指南之九--为模型添加验证

本节你将为Movie类型增加逻辑验证,以确保任何用户试图使用该应用程序创建或编辑影片时执行验证规则。 DRY(干爽) ASP.NET MVC的核心原则之一是干爽(“不要自己重复”)。ASP.NET MVC鼓励您只指定一次功能或行为,然后在应用程序中到处使用。这种做法减少了需要编写的代码量,使你的代码编写不容易出错,且更容易维护。 ASP.NET MVC和Entity Framework代码先

itmaxin的专栏 6092

ASP.NET MVC3 实例(六) 增加、修改和删除操作(二)

上篇我们在 ASP.NET MVC3 中实现了添加操作,由于时间关系没有完成修改、删除操作,我们新建了一个名为"Contact"的 Controller,并实现了添加方法,下边就让我们在此基础上来完成 ASP.NET MVC3 中的修改和删除操作。 首先,我们在 Contact 控制器类中添加一个名为 View()的方法,用来从 Contact 表中取出留言数据,并传递给列表页 "Index",

想做牛B人,先做牛逼事 2437
上一篇: Asp.Net MVC4.0 官方教程 入门指南之五--控制器访问模型数据
下一篇: Asp.Net MVC4.0 官方教程 入门指南之七--增加搜索方法和视图
花开是心碎了
博客等级 码龄17年 76粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值