应用ASP.NET MVC的系统软件架构-知识普及篇1

简介:

应用MVC的系统软件架构

 

          -----基础知识

 

引言

 

 

M-V-C(Model View Controller)

 

 

 

/Files/virusswb/应用MVC的系统软件架构.doc

 

   从上图可以看出是首先通过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中加入下面的代码。<%Html.RenderAction("Index3"); %>  这句直接呈现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 ; }
    }
}

 

 

  

 

Controller
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)

 

Index 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 >

 

 

   

 

ThankYou 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 " >
    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 >



本文转自 virusswb 51CTO博客,原文链接:http://blog.51cto.com/virusswb/405458,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
存储 Shell Linux
快速上手基于 BaGet 的脚本自动化构建 .net 应用打包
本文介绍了如何使用脚本自动化构建 `.net` 应用的 `nuget` 包并推送到指定服务仓库。首先概述了 `BaGet`——一个开源、轻量级且高性能的 `NuGet` 服务器,支持多种存储后端及配置选项。接着详细描述了 `BaGet` 的安装、配置及使用方法,并提供了 `PowerShell` 和 `Bash` 脚本实例,用于自动化推送 `.nupkg` 文件。最后总结了 `BaGet` 的优势及其在实际部署中的便捷性。
181 10
|
1月前
|
存储 前端开发 调度
Flux 与传统的 MVC 架构模式区别
Flux是一种用于构建用户界面的架构模式,与传统的MVC架构不同,它采用单向数据流,通过Dispatcher统一管理数据的分发,Store负责存储数据和业务逻辑,View只负责展示数据,使得应用状态更加可预测和易于维护。
|
22天前
|
XML 前端开发 安全
Spring MVC:深入理解与应用实践
Spring MVC是Spring框架提供的一个用于构建Web应用程序的Model-View-Controller(MVC)实现。它通过分离业务逻辑、数据、显示来组织代码,使得Web应用程序的开发变得更加简洁和高效。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring MVC,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
49 2
|
1月前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
1月前
|
JSON 算法 安全
JWT Bearer 认证在 .NET Core 中的应用
【10月更文挑战第30天】JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。它由头部、载荷和签名三部分组成,用于在用户和服务器之间传递声明。JWT Bearer 认证是一种基于令牌的认证方式,客户端在请求头中包含 JWT 令牌,服务器验证令牌的有效性后授权用户访问资源。在 .NET Core 中,通过安装 `Microsoft.AspNetCore.Authentication.JwtBearer` 包并配置认证服务,可以实现 JWT Bearer 认证。具体步骤包括安装 NuGet 包、配置认证服务、启用认证中间件、生成 JWT 令牌以及在控制器中使用认证信息
102 2
|
3月前
|
设计模式 开发框架 前端开发
MVC 模式在 C# 中的应用
MVC(Model-View-Controller)模式是广泛应用于Web应用程序开发的设计模式,将应用分为模型(存储数据及逻辑)、视图(展示数据给用户)和控制器(处理用户输入并控制模型与视图交互)三部分,有助于管理复杂应用并提高代码可读性和维护性。在C#中,ASP.NET MVC框架常用于构建基于MVC模式的Web应用,通过定义模型、控制器和视图,实现结构清晰且易维护的应用程序。
65 2
|
3月前
|
数据采集 JSON API
.NET 3.5 中 HttpWebRequest 的核心用法及应用
【9月更文挑战第7天】在.NET 3.5环境下,HttpWebRequest 类是处理HTTP请求的一个核心组件,它封装了HTTP协议的细节,使得开发者可以方便地发送HTTP请求并接收响应。本文将详细介绍HttpWebRequest的核心用法及其实战应用。
164 6
|
2月前
|
前端开发 Java
【案例+源码】详解MVC框架模式及其应用
【案例+源码】详解MVC框架模式及其应用
167 0
|
3月前
|
设计模式 前端开发 数据库
理解mvc架构
mvc架构
36 4
|
4月前
|
数据库 C# 开发者
WPF开发者必读:揭秘ADO.NET与Entity Framework数据库交互秘籍,轻松实现企业级应用!
【8月更文挑战第31天】在现代软件开发中,WPF 与数据库的交互对于构建企业级应用至关重要。本文介绍了如何利用 ADO.NET 和 Entity Framework 在 WPF 应用中访问和操作数据库。ADO.NET 是 .NET Framework 中用于访问各类数据库(如 SQL Server、MySQL 等)的类库;Entity Framework 则是一种 ORM 框架,支持面向对象的数据操作。文章通过示例展示了如何在 WPF 应用中集成这两种技术,提高开发效率。
72 0