ASP.NET MVC1.0设计连载

简介:
从下图可以看出是首先通过view的请求,经过url导航到一个controller中,最终定位到一个action,在action中访问具体的model,获取数据之后,将数据放入ViewData或者是TempData中,然后通过action呈现到指定的view上。在view上可以定制显示的格式。
 
  1 知识点
  1.1 ViewData和TempData的区别
  ViewData只能在本Action内有效,在本Action中可以保存数据。
  TempData可以在Action跳转中使用,TempData的数据在服务器的Session中保存,但是只保留一个来回。也就是第一次跳转过去的时候还可以访问,后面就没有了。范围限制在同一个Controller中的不同Action传递数据。
public
 class HomeController : Controller    {         public  ActionResult Index2()        {            ViewData[ " ViewData " =   " 我是VeiwData中的数据 " ;            TempData[ " TempData " =   " 我是TempData中的数据 " ;            return View( " Index2 " );        }         public  ActionResult  Index3( string  name)        {                        Models.ViewModels.UserViewModel userVM = new  Models.ViewModels.UserViewModel()            {                Name = name            };            return View(userVM );        }    }
 
  在Index2和Index3两个View中分别加入下面的代码,就是显示一下ViewData和TempData中的内容。
  为了显示效果,在Index2的View中加入下面的代码。 这句直接呈现Index3的View,直接可以看到效果。
< div >        1   < % =  ViewData[ " ViewData " ] % >< br  />     2   < % = TempData[ " TempData " ] % >      </ div >      < br  />      < %Html.RenderAction( " Index3 " ); % >
 
  在Index3的View中加入下面的代码
< h2 > ViewPage1 </ h2 >      < % = Model.Name % >      < br  />       < div >        1   < % =  ViewData[ " ViewData " ] % >< br  />     2   < % = TempData[ " TempData " ] % >      </ div >
 
  结果就是
 
  大家注意看上图中的两个红色框,第一个框中显示都有数据,第二个框中显示只有TempData中还有数据。

  1.2 Post-Redirect-Get防止刷新页面造成的重复提交数据
  在ASP.NET中要防止用户刷新页面,重复提交数据的话。需要在页面里面写JavaScript,而且要在后台c#代码中判断数据是否已经提交,才可以做到万无一失。
  在ASP.NET 的 MVC框架中要实现防止刷新页面非常的简单,就是利用上面介绍的TempData来实现的。TempData用来传递数据,支持跨action传递,但是只能第一次进入action的时候访问,后面再次访问的话,TempData中的数据就会丢失。就是利用了这一点,在提交页面将提交的内容放入TempData中,然后再成功的提示页面获取出来,如果TempData["Data"]=null的话,就说明是用户在刷新页面,可以跳转到其他view或者做个提示。
  具体代码如下:
  实体
using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace Mvc3EmptyApp.Models.Entities{    
public  class GuestBook    {         public   string  Name {  get set ; }         public   string  Email {  get set ; }         public   string  Comments {  get set ; }    }}
 
 
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;namespace Mvc3EmptyApp.Controllers{     public  class GuestBookController : Controller    {         //          //   GET / GuestBook /          public  ActionResult Index()        {            var entity  =   new  Models.Entities.GuestBook();            return View(entity );        }        [HttpPost]         public  ActionResult Index(Models.Entities.GuestBook guest)        {            TempData[ " entity " =  guest;            return RedirectToAction( " ThankYou " );        }         public  ActionResult ThankYou()        {             if  (TempData[ " entity " ==   null )            {                return RedirectToAction( " Index " );            }            var model  =  TempData[ " entity " as  Models.Entities.GuestBook;            return View(model);        }    }}
 
 
  新建view的时候选择强类型的view(create a strongly-typed view)
< %@ Page Title = ""  Language = " C# "  MasterPageFile = " ~/Views/Shared/Site.Master "  Inherits = " System.Web.Mvc.ViewPage<Mvc3EmptyApp.Models.Entities.GuestBook> "  % > < asp:Content ID = " Content1 "  ContentPlaceHolderID = " TitleContent "  runat = " server " >     Index </ asp:Content > < asp:Content ID = " Content2 "  ContentPlaceHolderID = " MainContent "  runat = " server " >      < h2 > Index </ h2 >      < % using (Html.BeginForm())       { % >         < p >          < % = Html.LabelFor (model => model.Name) % >          < % = Html.TextBoxFor (model => model.Name) % >          </ p >          < p >          < % = Html.LabelFor (model => model.Email ) % >          < % = Html.TextBoxFor (model => model.Email ) % >          </ p >          < p >          < % = Html.LabelFor (model => model.Comments ) % >          < % = Html.TextAreaFor (model => model.Comments ) % >          </ p >          < p >         < input type = " submit "  value = " Sign "   />          </ p >      < %} % > </ asp:Content > < asp:Content ID = " Content3 "  ContentPlaceHolderID = " Header "  runat = " server " > </ asp:Content > < asp:Content ID = " Content4 "  ContentPlaceHolderID = " SideBar "  runat = " server " > </ asp:Content > < asp:Content ID = " Content5 "  ContentPlaceHolderID = " Footer "  runat = " server " > </ asp:Content >
 

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Mvc3EmptyApp.Models.Entities.GuestBook>" %><asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">    ThankYou</asp:Content><asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">    <h2>ThankYou</h2>    <%=Html.DisplayForModel() %></asp:Content><asp:Content ID="Content3" ContentPlaceHolderID="Header" runat="server"></asp:Content><asp:Content ID="Content4" ContentPlaceHolderID="SideBar" runat="server"></asp:Content><asp:Content ID="Content5" ContentPlaceHolderID="Footer" runat="server"></asp:Content>



     本文转自My_King1 51CTO博客,原文链接:http://blog.51cto.com/apprentice/1360629,如需转载请自行联系原作者



相关文章
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
41 0
|
1月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
29 0
|
1月前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
99 5
|
3月前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
25 0
|
3月前
|
前端开发
.net core mvc获取IP地址和IP所在地(其实是百度的)
.net core mvc获取IP地址和IP所在地(其实是百度的)
124 0
|
5月前
|
开发框架 自然语言处理 前端开发
基于ASP.NET MVC开发的、开源的个人博客系统
基于ASP.NET MVC开发的、开源的个人博客系统
52 0
|
8月前
|
SQL 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(完:内附源码)
经过一段时间的准备,【ASP.NET Core MVC开发实战之商城系统】已经完成,目前代码已开发完成,先将全部内容整理分享,如有不足之处,还请指正。
107 0
|
8月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(六)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情,购物车等功能的开发,今天继续讲解订单管理功能开发,仅供学习分享使用,如有不足之处,还请指正。
215 0
|
前端开发 数据安全/隐私保护
net MVC中的模型绑定、验证以及ModelState
net MVC中的模型绑定、验证以及ModelState 模型绑定 模型绑定应该很容易理解,就是传递过来的数据,创建对应的model并把数据赋予model的属性,这样model的字段就有值了。
1653 0