mvc_第一章后入门_第一遍_控制器和视图
在掌握了数据库访问方法之后,我们来看几个mvc的入门程序,借此熟悉mvc的常见工作方式。
一、创建项目,显示一个最简单的页面。
要点:1、为了突出重点,不使用模版;2、项目类型为mvc,便于获得vs添加的各种引用、文件夹
如图(vs2017,其他版本大同小异,下同):
新建项目

选择模版和项目类型

右键控制器文件夹,为项目添加控制器

选择控制器类型(选最新的)

按照惯例,取名为“Home”

完成之后,系统自动创建控制器代码(HomeController.cs),里面默认的方法(操作)是Index。
对方法里返回的视图的代码点右键,为它添加视图文件

使用默认名称(和控制器里的操作同名),去掉全部选项,使用最干净的视图

在随后生成的文件(可以理解为以前所学的html文件)里,使用网页知识,完成一些简单的内容,如:

上图中,除了汉字,都是自动生成的内容。
到此为止,最简单的mvc程序完成。右侧资源管理器中可以看到创建的文件

运行之后可以看到效果

注意:地址栏中的“Home”是控制器名称,“Index”是具体操作。它们对应控制器文件中的类和方法。
以后在调试的时候,如果出现无法在32位环境中运行的内容,可以调整vs的调试器,改为64位环境。具体如下图:

具体位置:

二、视图中的语法:Razor
Razor语法的核心:在一堆html中,随时用“@”符号切换到写C#的模式。
例1:输出327+254的值

例2:计算1+2+3+...+100的值

c#标记可以和html混写,随时用@切换为C#。
例3:用无序列表输出1-20

Razor语法的详细介绍,见书上P115。
三、Mvc中的输入和输出:
1.输出:控制器向视图传值-viewdata,P85
例:从后台(控制器)向前台(视图)传递内容
public ActionResult Index()
{
ViewData["d1"] = "我是来自后台的ViewData数据";
TempData["d1"] = "我是来自后台的TempData数据";
return View();
}
运行效果:

2.输入:视图向控制器传值-表单知识,P102
例:输入一个数字,翻倍把它输出。
控制器代码:
public class HomeController : Controller
{
// GET: Home
public ActionResult Index(int a=)//此处的a=0表示默认值
{
ViewData["d1"] = a;
return View();
}
}
前台代码:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
@{int x = int.Parse(ViewData["d1"].ToString());
if (x == )
{
<div> 还没输入值 </div>
}
else
{
<div>已输入值@(x)</div>
<div>它的2倍是@(x * )</div>
}
}
</div>
<div>
<form action="/home/index">
<input type="text" name="a" /><input type="submit" />
</form>
</div>
</body>
</html>
以上例子是把运算放在了视图中,我们还可以把它放在控制器中运行,大家尝试一下。
对于标准的mvc结构来说,这种运算应该算是“业务逻辑”,应该放在业务层处理。这里只是为了演示视图和控制器的工作方式。
Request作为内置对象可以获取跟请求用户相关的内容。在获取表单内容方面,无论用户是用get还是post方式提交,都可以通过Request[key]的方式获取内容。
例,控制器代码:
public ActionResult Index()
{
if (Request["a"] == null)
{
ViewData["a"] = "空";
}
else if (Request["a"] == "")
{
ViewData["a"] = "无";
}
else
{
ViewData["a"] = Request["a"];
}
return View();
}
视图代码:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
@ViewData["a"]
<form id="form1" name="form1" method="put" action="/Home/Index">
<label for="a"></label>
<input type="text" name="a" id="a" />
<input type="submit" />
</form>
</div>
</body>
</html>
大家可以自行熟悉使用
四、综合实例
1、输入数字n,在屏幕上输出n层的杨辉三角形。
控制器代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace WebApplication1.Controllers
{
public class HomeController : Controller
{
// GET: Home
public ActionResult Index(int n=)//此处的a=0表示默认值
{
if (n == )
{
ViewData["d1"] = null;
}
else
{
int[,] a;
a = new int[n,n];
for (int i = ; i < n; i++)
{
a[i, ] = ;
}
for (int i = ; i < n; i++)
{
for (int j = ; j <= i; j++)
{
a[i, j] = a[i - , j - ] + a[i - , j];
}
}
ViewData["d1"] = a;
}
return View();
}
}
}
视图代码:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
@if (ViewData["d1"] != null)
{
<table style="width: 100%; border-color:black; padding:0px; border-collapse:collapse;" border=''>
@{
int[,] a = (int[,])ViewData["d1"];
for (int i = ; i < a.GetLength(); i++)
{
<tr>
@for (int j = ; j <= i; j++)
{
<td>@(a[i, j])</td>
}
</tr>
}
}
</table>
}
</div>
<div>
<form action="/home/index">
<input type="text" name="n" /><input type="submit" />
</form>
</div>
</body>
</html>
2、结合数据库知识,完成一个能对数据库实现简单“增删改查”的项目。
mvc_第一章后入门_第一遍_控制器和视图的更多相关文章
- Kettle解决方案: 第一章ETL入门
第一章ETL入门 1.1 OLPT和数据仓库对比 普通的事务系统和商业智能系统(BI)有什么区别? 1个独立的普通事务系统也被称为在线事务处理系统(OLTP) 商业智能系统也常被称为决策支持系统(DS ...
- Java Persistence with MyBatis 3(中文版) 第一章 MyBatis入门
本章将涵盖以下话题: ž MyBatis是什么? ž 为什么选择MyBatis? ž MyBatis安装配置 ž 域模型样例 1.1 MyBatis是什么 MyBatis是一个简化和实现了Ja ...
- 第一章 Kubernetes入门
第一章 Kubernetes入门 kubernetes是基于容器技术的分布式架构领先方案,是一个完备的分布式系统支撑平台. kubernetes带来的好处:1)全面拥抱微服务:2)统可以随时随地整体“ ...
- MySQL----MySQL数据库入门----第一章 数据库入门
第一章 数据库入门 1.1 数据库基础知识 1.1.1 数据库概述 数据不仅包括普通意义上的数字,还包括文字.图像.声音等.也就是说,凡是在计算机中用来描述事物的记录都可称作数据. 数据库的基本特点: ...
- 《C# to IL》第一章 IL入门
我们用C#.VB.NET语言编写的代码最终都会被编译成程序集或IL.因此用VB.NET编写的代码可以在C#中修改,随后在COBOL中使用.因此,理解IL是非常有必要的. 一旦熟悉了IL,理解.NET技 ...
- ASP.NET自定义控件组件开发 第一章 第三篇 第一章的完结篇
ASP.NET自定义控件组件开发 第一章 第三篇 第三篇:第一章的完结篇 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ...
- Python之旅_第一章Python入门
一.编程语言分类 1.机器语言:即计算机能听懂的二进制语言,0000 0001,直接操控硬件: 2.汇编语言:简写的英文标识符代替二进制语言,本质同样是直接操控硬件: 3.高级语言:用更贴近人类的语言 ...
- 鱼书_第一章_Python入门
Python版本 Python有Python 2.x和Python 3.x两个版本.两个版本不兼容,可能出现用Python 3.x编的代码不能被Python 2.x执行的情况. Python安装 An ...
- 烟大 Contest1024 - 《挑战编程》第一章:入门 Problem D: LC-Display(模拟计算器显示数字)
Problem D: LC-Display Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 14 Solved: 3[Submit][Status][We ...
随机推荐
- ARM64编译工具链下载
下面是自制的用于编译ARMv8指令的交叉编译工具链: 1.运行在PC上,支持SVE指令,不支持SVE ACLE,版本GCC9.2 https://pan.baidu.com/s/1_NnwajWCel ...
- Codeforces Round #605 (Div. 3)
地址:http://codeforces.com/contest/1272 A. Three Friends 仔细读题能够发现|a-b| + |a-c| + |b-c| = |R-L|*2 (其中L ...
- Samba应用案例
一.配置文件详解 Samba配置文件非常简洁明了,所有的设置都在 /etc/samba/smb.conf 配置文件中进行,通过对该配置文件的修改,可以将Samba配置为一台匿名文件服务器.基于账户的文 ...
- discuz x3.2简化的搜索框代码
这是在做一个模板时改的,并不代表这是一个美化或者优化,只是特殊情况下的需要.只有一个搜索框,默认帖子搜索,无搜索按钮,输入内容直接回车搜索. <!--{if $_G['setting']['se ...
- Django 缓存配置的多种方式
django 的缓存配置有多种方式,主要包含以下几种: 1.开发调试模式 2.内存模式 3.使用文件 4.直接使用数据库 5.使用redis或者memcache 这里主要是记录一下那些不常用,但是在微 ...
- VIJOS-P1294 拯救OIBH总部
洛谷 P1506 拯救oibh总部 洛谷传送门 JDOJ:1405: VIJOS-P1294 拯救OIBH总部 JDOJ传送门 Description OIBH被突来的洪水淹没了> .< ...
- LeetCode 622. Design Circular Queue
原题链接在这里:https://leetcode.com/problems/design-circular-queue/ 题目: Design your implementation of the c ...
- 管理node.js的nvm
我们坑同时在运行2个项目.而2个不同的项目所使用的node版本又不一样,或者是要用更新的node版本进行试验或学习.这种情况下,对于维护多个版本的node将会是一键非常麻烦的事情,而nvm就是为了解决 ...
- python paramiko模块简介及安装
一:简介 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 由于使用的是python这样的能够跨平台运行的语言,所以所有python支 ...
- [BZOJ1015/JSOI2008]星球大战
// 此博文为迁移而来,写于2015年7月16日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6le.html 1.题 ...