MVC笔记 初识模型(二)

2023-11-04

1.在视图中创建窗口,新建一个View视图。添加视图,选中复选框"创建强类型视图"。

      需要输入的地方可以用MVC内置的HTML辅助方法来生成字段;需要显示标题的地方可以用 <%=Html.Label("")%>方法,需要显示文本的地方可以使用 <%=Html.TextBox("")%>方法。

      在MVC中,可以利用Html.BeginForm()辅助方法实现自动输出窗口标识,语法如下:

1     <% using(Html.BeginForm("Save","Guestbook",FormMethod.Post)){ %>
2        窗口内容
3     <%} %>

     或省略第三个参数,因为窗口默认的FormMethod就是"Post",如果 窗口送出的对象是同一个Action,那么也可以将语法简化如下:

1     <% using(Html.BeginForm()){ %>
2        窗口内容
3     <%} %>

      因为送出窗口的对象与当前视图所在的Controller相同,只是Action不同,所以你可以运用一下技巧,通过View的RouteDate.Values对象取得当前的所有路由值,并动态加载路由值中的Controller的名称,示例如下:

1     <% using(Html.BeginForm("Save",RouteData.Values["controller"].ToString())){ %>
2        窗口内容
3     <%} %>

NOTE:   MVC的路由值中包含许多与路由有关的信息,而这些路由的名称在MVC2中只有3个是内置的,分别为controller、action和area。其中,area路由值只有在链接到区域网站时才会有实际值,其他路由值的名称都可以由开发人员自定义(例如id)。自定义的路由值名称都会在Global.asax.cs文件的RegisterRoutes()方法中定义。

2. 通过Action接收窗口数据

    TIP: 要想从视图转回控制器,可以在视图页面的空白处右击鼠标,再在弹出的快捷菜单中选择"转到控制器"即可。返回Guestbook控制器之后,可以利用vs2010的"插入代码段"功能新建一个动作,该功能只支持HTTP POST请求,如图:

完成之后的代码如下:

1  [HttpPost]
2         public ActionResult Save(string name,string Email,string content)
3         {
4             ViewData["name"] = name;
5             ViewData["Email"] = Email;
6             ViewData["content"] = content;
7             return View();
8         }

       从Save()方法所输入的参数来看,此Save()方法输入了3个参数,其参数名称与在Index视图中所使用的窗口字段名称一模一样。为什么通过QueryString()方法或Form()方法传递过来的数据会变成Save()方法的参数呢?因为在MVC中有一个Model Binder(数据模型绑定)机制,通过这个机制可以自动将客户端传过来的数据转换成.NET类型数据,也因为这样,才能直接通过Save()方法的参数取得相关数据。

NOTE: 窗口字段名称是指中的name属性。

     在Save()方法之前应用了一个 [HttpPost]属性,用于告知MVC此动作只会接受 Http Post请求送过来的数据。这个属性有自己的专有名称,叫做动作过滤器(Action Filter)或 动作选择器(Action Selector)。

     启动调试,在浏览器中输入http://localhost:1309/Guestbook,并在留言板中输入信息,发现提交查询后,信息都保存在了save中。确认窗口能够通过Action来接收之后,再将数据写入数据库。前面已经将Entity Framwork创建了一个数据模型,下面可以用该模型来讲数据希尔数据库。Save动作编写完成后的程序代码如下:

 

 1 [HttpPost]
 2         public ActionResult Save(string name,string Email,string content)
 3         {
 4             MvcApplication1.Models.GuestbookEntities db = new Models.GuestbookEntities();
 5 
 6             db.AddTo 留言板(new Models.留言板()
 7             {
 8                name =name,
 9                Email=Email,
10                content=content,
11                dtime=DateTime.Now
12 
13             });
14 
15             db.SaveChanges();
16             ViewData["name"] = name;
17             ViewData["Email"] = Email;
18             ViewData["content"] = content;
19 
20             return View();
21         }

 

我们要在Guestbook/Index中完成"显示所有留言"的功能,修改Guestbook中的Index()方法代码如下:

1  public ActionResult Index()
2         {
3             MvcApplication1.Models.GuestbookEntities db = new Models.GuestbookEntities();
4             var data = db.留言板;
5             return View(data);//输入View()的第一个参数就是要给View使用的Model数据
6         }

NOTE : 输入Model的数据不能为string类,否则会被当成视图名称来处理。

TIP: 如果你的项目从来没有生成过,在你的"视图数据类型"下拉表中找不到你要的数据类型。如果你的Entity Framework或LINQ to SQL模型已经更新,也千万要进行生成(Build)操作后在执行"加入视图"动作,这样才能在"视图数据类型"下拉列表中看到你需要的数据类型。

      为了方便操作,我们新添加一个留言板视图。新建操作完成后,稍微调整一下页面,完成后代码如下。

 

 1 <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcApplication1.Models.LogOnModel>>" %>
 2 
 3 <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
 4     显示留言
 5 </asp:Content>
 6 <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
 7     <h2>显示留言</h2>
 8     <table>
 9         <tr>
10             <th></th>
11             <th>
12                 姓名
13             </th>
14             <th>
15                 Email
16             </th>
17             <th>
18                 内容
19             </th>
20             <th>
21                建立时间
22             </th>
23         </tr>
24 
25     <% foreach (var item in Model) { %>
26     
27         <tr>
28             <td>
29                 <%: item.UserName %>
30             </td>
31             <td>
32                 <%: item.Email %>
33             </td>
34             <td>
35                 <%=Html.Encode(item.Content).Replace("\r\n","<br/>\r\n") %>
36             </td>
37             <td>
38                <%:String.Format("{0:g}",item.time) %>
39             </td>
40         </tr>
41     
42     <% } %>
43     </table>
44     <p>
45         <%: Html.ActionLink("留下足迹", "Write") %>
46     </p>
47 </asp:Content>

 

 

 

 

 

转载于:https://www.cnblogs.com/Eleanore/archive/2012/11/20/2778792.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC笔记 初识模型(二) 的相关文章

随机推荐

  • indexDB & localForage

    一 前言 前端本地化存储算是一个老生常谈的话题了 我们对于 cookies Web Storage sessionStorage localStorage 的使用已经非常熟悉 在面试与实际操作之中也会经常遇到相关的问题 但这些本地化存储的方
  • 没有参数的ajax怎么怎么写,我的ajax没传任何参数请求接口为systemlog/read "?“跟的是什么参数怎么去掉或者说为什么会这样 ?...

    Request URL http localhost 3600 systemlog read callback jQuery1111025511396121069163 1491487798084 Request Method POST S
  • Pycharm(python) 报错: from lxml import etree ModuleNotFoundError: No module named ‘lxml‘

    Pycharm 报错 from lxml import etree ModuleNotFoundError No module named lxml 注 此类错误绝大多数情况下都是环境中少了报错时提示的python包 按照以下方法均可解决
  • Shell--基础--02--变量

    Shell 基础 02 变量 1 定义变量 变量名 值 k v1 定义变量k 值为v1 1 1 注意 变量名和等号之间不能有空格 1 2 命名规则 只能使用英文字母 数字和下划线 首个字符不能以数字开头 中间不能有空格 可以使用下划线 不能
  • linux内网yum源服务器搭建

    1 nginx location root usr local Kylin Server V10 SP3 General Release 2303 X86 64 autoindex on autoindex localtime on aut
  • 下载网页视频并自动合成视频

    本人博客已迁移至 https nasdaqgodzilla github io 1 首先使用Chrome打开网页 单击F12打开开发者工具 开始视频播放 在F12出来的界面中单击Network 在Network中有文件列表 检查当中是否存在
  • 星星之火-48:在LTE中,66.67us的符号发送时间是怎么来的呢?

    66 67us符号的发送时间是怎么来的呢 这就涉及到 发送一个符号所需的时间 即符号周期是怎么来的 1 先从频率的角度看子载波的频率 频分复用 1 LTE基带信号的带宽 1 4MHz 3MHz 5MHz 10MHz 15MHz 20MHz等
  • 企业微信回调接口验签

    文章目录 一 企业微信配置参数 二 验签 三 企业微信客户联系回调 四 相关工具类 企业微信提供了回调接口 允许企业服务商和企业应用接收到企业微信的事件通知和用户操作通知 在接收到回调通知时 需要进行验签操作 以确保通知的安全性和有效性 官
  • html+css+js

    2021年3月16日 一 标签内容 1 声明为HTML5文档 1 用于游览器正确显示网页 2
  • react项目搭建 (eslint+prettier)

    1 安装nodejs 安装git 安装vscode 安装yarn 2 npm install create react app yarn g 在yarn中安装react脚手架 3 在系统资源中配置path 在指定目录下create reac
  • JAVA面试(三)

    1 什么是本地调用 java编译器将包含本地方法的class对应的方法添加ACC NATIVE标识 而JVM负责将动态库加载到内存 Java执行引擎执行到本地方法时找到对应的函数 完成本地方法的调用 2 多线程 3 线程同步怎么实现 1 s
  • MFCC特征值详解

    看了网上的很多MFCC 依然没能够学号MFCC 因此糊了一段时间详细的看了下MFCC的内容 现在也算是对于MFCC有了更深入的理解了 不管是语音识别还是其他的一系列的识别大体都分为三个步骤 1 输入信号的预处理2 特征值提取3 相关算法的识
  • 薪资16K,在阿里外包工作是一种什么体验...

    我17年毕业于一个普通二本学校 电子信息工程学院 是一个很不出名的小本科 大学期间专业知识也没有去认真的学习 所以毕业的时候就随便找了一份工作 在一个小公司做功能测试 记得那时候税前薪资大概是7k左右 因为是在工厂 工作环境很差 也很危险
  • Fabric CA 1.4 官方文档中文版

    链接 Fabric CA中文文档 目录 概述 Fabric CA概述 快速上手 安装前提条件 安装软件 使用Fabric CA命令行 配置软件 Fabric CA 服务器 初始化服务器 启动服务器 配置数据库 配置LDAP 搭建集群 搭建多
  • moviepy快速切分视频并保存片段

    文章目录 1 直接使用ffmepg 2 使用moviepy本身 moviepy安装最新版本 pip install moviepy pre upgrade 版本是v2 0 0 dev2 有两种方法一种快速的 1 直接使用ffmepg fro
  • 基于STM32的DMX512开发笔记

    首先基本了解一下DMX512的基本协议 一 DMX512协议 DMX 是Digital MultipleX 的缩写 意为多路数字传输 DMX512控制协议是美国舞台灯光协会 usITT 于1990年发布的灯光控制器与灯具设备进行数据传输的工
  • 使用小波变换对图像进行去噪

    使用小波变换对图像进行去噪 实现效果 代码 import matplotlib pyplot as plt from skimage restoration import denoise wavelet estimate sigma fro
  • GAN_Unet模型实现

    文章目录 摘要 一 GAN 1 1 输入 输出 1 2 优化目标 1 3 缺点 1 4 CGAN 1 5 LSGAN 1 6 C LSGAN实现 1 7 判别器 总代码 二 Unet 2 1 编码器 2 2 编码器 2 3 效果 2 4 模
  • 深度学习(自编码器)

    深度学习目录 自适应线性单元 Widrow and Hoff 1960 神经认知机 Fukushima 1980 GPU 加速 卷积网络 Chellapilla et al 2006 深度玻尔兹曼机 Salakhutdinov and Hi
  • MVC笔记 初识模型(二)

    1 在视图中创建窗口 新建一个View视图 添加视图 选中复选框 创建强类型视图 需要输入的地方可以用MVC内置的HTML辅助方法来生成字段 需要显示标题的地方可以用 方法 需要显示文本的地方可以使用 方法 在MVC中 可以利用Html B