ASP.NET MVC 学习笔记(三)

目录

一、ActionResult的一些子类对象

 二、Razor模板引擎cshtml常用混编介绍

三、区域介绍以及跨区域跳转

四、 Models类属性限制 (补)



一、ActionResult的一些子类对象

  1. ViewResult   返回相应的视图
    1.   public ActionResult Index()
              {
                  return View();
              }
          返回同名的View视图   
  2. ContentResult  返回字符串
    1.   public ActionResult Index()
              {
                  return Content("返回字符串");
              }

  3. RedirectResult        重定向到某个网页
    1.    public ActionResult Demo()
              {
                  //Response.Redirect(""); // 和下面同理
                  return Redirect("http://www.baidu.com"); //return Redirect 是Response.Redirect();的封装后的
              }

      //return Redirect 是Response.Redirect();的封装后的

  4. RedirectToRouteResult  根据路由进行重定向
    1.   public ActionResult DemoAction()
              {
                 
                  return RedirectToAction("Index");
              }

      可跳转到当前控制器下的 Index Action方法

  5. FileResult            向客户端输出文件
    1.  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 文件读取封装的

    2. 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>

    3. 显示端        


    1、通过HtmlPagr1.html页面 通过上传文件形式保存到D盘内

    2、通过img src绝对地址的Get请求方式找到图片 并显示出来

    这是File返回的功能 会向客户端输出显示一个文件(文件包含很多类型,需要在File返回时指定好,或通过字符串截取)

  6. JsonResulr            向客户端返回对象的Json序列化后的结果
    1. Controller端
         public ActionResult GetJson()
              {
                  return Json(new {id=1,name="zhangsan"},
                              JsonRequestBehavior.AllowGet);
              }

      通过匿名集合向页面输出一个Json对象

    2. 显示端                                                                                                                               

  7. HttpStatusCodeResult  向客户端输入状态码
    1. Controller端                                                                                                                        
         //返回状态码 400 或 500等
              public ActionResult GetCode()
              {
                  return new HttpStatusCodeResult
                                 (System.Net.HttpStatusCode.NotFound);
              }

    2. 显示端                                                                                                                                               

    可以设置404、500、200等

  8. PartialViewResult     返回部分页面 重复使用的地方用部分页
    1. Controller端

      //生成部分页面 类似与组件的作用 某个地方重复使用的 可以写到Partial里
      //ActionResult会默认加上模板页 这个不会
      public PartialViewResult GetPartial()
        {
           return PartialView();
         }

    2. View端  GetPartial.cshtml       

                                                                                        
    3. View端 Hom2-Index.cshtml

    4. 显示端

       

    5. 小结 部分页分为带处理的和不带处理 2种

      1. 带处理的部分页面 有Action方法 通过调用Action方法使用

      2. 不带处理的部分页面 没有Action方法 通过在Shared文件夹创建_Login调用

      3. 传值方面,带处理的部分页面可以通过Action传值,不带处理的部分页面要先在Models建立一个实体类按上面方法穿值 @Model.Name 接收。

 二、Razor模板引擎cshtml常用混编介绍

  1. 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的区域
  1. 区域的作用                                                                                                                        用于构建其他板块使用(比如游戏板块、后台系统板块),每个区域都有单独的路由。
  2. 区域创建成功后要把原始的路由设置一下 加上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: 样式设置   
  1.  不跨区域的路由地址显示                                                                               @Url.Action
  2. 跨区域的路由地址显示                                                                                     @Url.RouteUrl name、sex、age会拼接到Url?后面
  3. View全部显示
  4. 启动后显示

四、 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、//引用类型默认是选填类型
      //值类型默认是必填的

     如果值类型需要改为选填的在 类型后面需要加 ?号。

        

总结

这次汇总内容比较多和杂,需要慢慢去看里面关键的内容 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值