目录
一、ActionResult的一些子类对象
- ViewResult 返回相应的视图
-
返回同名的View视图public ActionResult Index() { return View(); }
-
- ContentResult 返回字符串
-
public ActionResult Index() { return Content("返回字符串"); }
-
- RedirectResult 重定向到某个网页
-
public ActionResult Demo() { //Response.Redirect(""); // 和下面同理 return Redirect("http://www.baidu.com"); //return Redirect 是Response.Redirect();的封装后的 }
//return Redirect 是Response.Redirect();的封装后的
-
- RedirectToRouteResult 根据路由进行重定向
-
public ActionResult DemoAction() { return RedirectToAction("Index"); }
可跳转到当前控制器下的 Index Action方法
-
- FileResult 向客户端输出文件
- Controller端
public ActionResult GetFile(string name) { return File(BasePath+@"\"+name, "image\\png"); } //上传文件 private static string BasePath = @"E:\upload"; public ActionResult UploadFile(HttpPostedFileBase file) //HttpPostedFileBase是对Response.file 封装的 { //file.ContentLength //文件大小可用它判断 string filename = DateTime.Now.Ticks + file.FileName; file.SaveAs(BasePath + @"\" + filename); return Content(filename); }
HttpPostedFileBase是对File 文件读取封装的
- View端 HtmlPagr1.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body> <img src="/Hom2/GetFile?name=6382175554249544161.png" alt="Alternate Text" width="100"/> <form action="/Hom2/UploadFile" method="post" enctype="multipart/form-data"> <input type="file" name="file" value="" /> <button>上传文件</button> </form> </body> </html>
- 显示端
1、通过HtmlPagr1.html页面 通过上传文件形式保存到D盘内
2、通过img src绝对地址的Get请求方式找到图片 并显示出来
这是File返回的功能 会向客户端输出显示一个文件(文件包含很多类型,需要在File返回时指定好,或通过字符串截取)
- Controller端
- JsonResulr 向客户端返回对象的Json序列化后的结果
- Controller端
public ActionResult GetJson() { return Json(new {id=1,name="zhangsan"}, JsonRequestBehavior.AllowGet); }
通过匿名集合向页面输出一个Json对象
-
显示端
- Controller端
- HttpStatusCodeResult 向客户端输入状态码
- Controller端
//返回状态码 400 或 500等 public ActionResult GetCode() { return new HttpStatusCodeResult (System.Net.HttpStatusCode.NotFound); }
- 显示端
可以设置404、500、200等
- Controller端
- PartialViewResult 返回部分页面 重复使用的地方用部分页
-
Controller端
//生成部分页面 类似与组件的作用 某个地方重复使用的 可以写到Partial里 //ActionResult会默认加上模板页 这个不会 public PartialViewResult GetPartial() { return PartialView(); }
-
View端 GetPartial.cshtml
-
View端 Hom2-Index.cshtml
-
显示端
-
小结 部分页分为带处理的和不带处理 2种
-
带处理的部分页面 有Action方法 通过调用Action方法使用
-
不带处理的部分页面 没有Action方法 通过在Shared文件夹创建_Login调用
-
传值方面,带处理的部分页面可以通过Action传值,不带处理的部分页面要先在Models建立一个实体类按上面方法穿值 @Model.Name 接收。
-
-
二、Razor模板引擎cshtml常用混编介绍
- Controller端
public class StudentController : Controller { // GET: Student public ActionResult Index() { return Content("123456"); } public ActionResult List() { return View(new List<Student> { new Student() { Id=1, Name="张三", Age=12 }, new Student() { Id=2, Name="李四", Age=32 }, new Student() { Id=3, Name="李现", Age=18 } }); } }
- View端 List
@*//声明 @model *@ @model List<Study4.Models.Student> @*编写代码片段 @{代码片段 } *@ @{ ViewBag.Title = "List"; string html = @"<span style='color=red'>C#代码写的HTML代码</span>"; } @*如果是表达式的时候需要加上 @()这样的写法*@ <h2>List @(10+20)</h2> @*如果单个输出@符号 需要另一个@符号转译*@ <h3>@@</h3> @*如果需要C#写的html代码显示出来需要用@Html.Raw来写*@ <h3>@Html.Raw(html)</h3> <ul> @foreach (var stu in Model) { <li>@stu.Id-@stu.Name-@stu.Age</li> } </ul>
所有C#代码前要加@符号、
@model 用户声明
C#代码端编写方式 @{代码片段}
如果想输出@ 使用@@这样转译输出
如果想输出表达式使用 @(1+1) 这样输出
foreach可以嵌套在Ul里 循环内容自动由li实现显示 像上面一样
三、区域介绍以及跨区域跳转
- 区域的创建 项目上点击右键->添加->新搭建基架的项目->MVC区域
- 创建后会生成一个Areas的文件夹
- 我这边创建了一个Admin的区域和Sport的区域
- 区域的作用 用于构建其他板块使用(比如游戏板块、后台系统板块),每个区域都有单独的路由。
- 区域创建成功后要把原始的路由设置一下 加上namespaces 要不然有同名Action原始的会报错
- 跨区域跳转
- 直接使用html a src来跳转 缺点是当路由发生改变a标签也必须跟着修改
- @Html.RouteLink @*使用C#写的跳转方式 会生成一个a标签
用的这个重载,下面为重载介绍
- linkText: 显示a标签的内容
- routeName:对应区域的路由方法name如下图
- routeValue :new{controller="",action=""} 要跳转对应控制器和Action方法名字
- htmlAttributes : 如需要使用样式,可以这样使用new{@class=""} 或 new{style=""}
- 不跨区域跳转
![]()
@Html.ActionLink重载参数介绍
- linkText:a标签显示的内容
- actionName: 需要跳转的Action名字
- routeValues:传输数据
- htmlAttributes: 样式设置
- 不跨区域的路由地址显示 @Url.Action
- 跨区域的路由地址显示 @Url.RouteUrl
name、sex、age会拼接到Url?后面
- View全部显示
- 启动后显示
四、 Models类属性限制 (补)
namespace Study4.Models { //页面对应的增删改查要有对应的ViewModel public class RegisterViewModel { //引用类型默认是选填类型 //值类型默认是必填的 [Required] //改变必填项 [RegularExpression("",ErrorMessage ="正则没有通过")] //正则表达式 public string Email { get; set; } public string Password { get; set; } //nameof 可以避免手动拼写变量或方法的名称带来的错误。 [Compare(nameof(Password))] //确认密码比较 ConfimPassword和Password保持一致 public string ConfimPassword { get; set; } [Range(10,20,ErrorMessage ="年龄必须在10-20之间")] public int Age { get; set; } public DateTime? BornDate { get; set; } //如果要变成选填项 需要加问号 } }
1、[RegularExpression("正则表达式验证",ErrorMessage ="正则没有通过")] 正则表达式
2、 nameof 可以避免手动拼写变量或方法的名称带来的错误。
3、 [Compare(nameof(Password))] 确认密码比较 ConfimPassword和Password保持一致
3、[Range(10,20,ErrorMessage ="年龄必须在10-20之间")] 值限制
4、//引用类型默认是选填类型
//值类型默认是必填的如果值类型需要改为选填的在 类型后面需要加 ?号。
总结
这次汇总内容比较多和杂,需要慢慢去看里面关键的内容