应用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,如需转载请自行联系原作者
目录
相关文章
|
5月前
|
数据采集 机器学习/深度学习 运维
量化合约系统开发架构入门
量化合约系统核心在于数据、策略、风控与执行四大模块的协同,构建从数据到决策再到执行的闭环工作流。强调可追溯、可复现与可观测性,避免常见误区如重回测轻验证、忽视数据质量或滞后风控。初学者应以MVP为起点,结合回测框架与实时风控实践,逐步迭代。详见相关入门与实战资料。
|
5月前
|
前端开发 JavaScript BI
如何开发车辆管理系统中的车务管理板块(附架构图+流程图+代码参考)
本文介绍了中小企业如何通过车务管理模块提升车辆管理效率。许多企业在管理车辆时仍依赖人工流程,导致违章处理延误、年检过期、维修费用虚高等问题频发。将这些流程数字化,可显著降低合规风险、提升维修追溯性、优化调度与资产利用率。文章详细介绍了车务管理模块的功能清单、数据模型、系统架构、API与前端设计、开发技巧与落地建议,以及实现效果与验收标准。同时提供了数据库建表SQL、后端Node.js/TypeScript代码示例与前端React表单设计参考,帮助企业快速搭建并上线系统,实现合规与成本控制的双重优化。
|
5月前
|
机器学习/深度学习 人工智能 缓存
面向边缘通用智能的多大语言模型系统:架构、信任与编排——论文阅读
本文提出面向边缘通用智能的多大语言模型(Multi-LLM)系统,通过协同架构、信任机制与动态编排,突破传统边缘AI的局限。融合合作、竞争与集成三种范式,结合模型压缩、分布式推理与上下文优化技术,实现高效、可靠、低延迟的边缘智能,推动复杂场景下的泛化与自主决策能力。
468 3
面向边缘通用智能的多大语言模型系统:架构、信任与编排——论文阅读
|
5月前
|
人工智能 自然语言处理 安全
AI助教系统:基于大模型与智能体架构的新一代教育技术引擎
AI助教系统融合大语言模型、教育知识图谱、多模态交互与智能体架构,实现精准学情诊断、个性化辅导与主动教学。支持图文语音输入,本地化部署保障隐私,重构“教、学、评、辅”全链路,推动因材施教落地,助力教育数字化转型。(238字)
943 23
|
6月前
|
消息中间件 数据采集 NoSQL
秒级行情推送系统实战:从触发、采集到入库的端到端架构
本文设计了一套秒级实时行情推送系统,涵盖触发、采集、缓冲、入库与推送五层架构,结合动态代理IP、Kafka/Redis缓冲及WebSocket推送,实现金融数据低延迟、高并发处理,适用于股票、数字货币等实时行情场景。
848 3
秒级行情推送系统实战:从触发、采集到入库的端到端架构
|
5月前
|
人工智能 JavaScript 前端开发
GenSX (不一样的AI应用框架)架构学习指南
GenSX 是一个基于 TypeScript 的函数式 AI 工作流框架,以“函数组合替代图编排”为核心理念。它通过纯函数组件、自动追踪与断点恢复等特性,让开发者用自然代码构建可追溯、易测试的 LLM 应用。支持多模型集成与插件化扩展,兼具灵活性与工程化优势。
396 6
|
5月前
|
人工智能 API 数据库
Semantic Kernel .NET 架构学习指南
本指南系统解析微软Semantic Kernel .NET架构,涵盖核心组件、设计模式与源码结构,结合实战路径与调试技巧,助你从入门到贡献开源,掌握AI编排开发全栈技能。
495 2
|
5月前
|
存储 人工智能 搜索推荐
拔俗AI助教系统:基于大模型与智能体架构的新一代教育技术引擎
AI助教融合大语言模型、教育知识图谱、多模态感知与智能体技术,重构“教、学、评、辅”全链路。通过微调LLM、精准诊断错因、多模态交互与自主任务规划,实现个性化教学。轻量化部署与隐私保护设计保障落地安全,未来将向情感感知与教育深度协同演进。(238字)
579 0
|
5月前
|
机器学习/深度学习 人工智能 搜索推荐
拔俗AI学伴智能体系统:基于大模型与智能体架构的下一代个性化学习引擎
AI学伴智能体系统融合大模型、多模态理解与自主决策,打造具备思考能力的个性化学习伙伴。通过动态推理、长期记忆、任务规划与教学逻辑优化,实现千人千面的自适应教育,助力因材施教落地,推动教育公平与效率双提升。(238字)
707 0