.NetMVC视图与传值问题分析

9 篇文章 0 订阅
3 篇文章 0 订阅

建立控制器和视图

这一章节我们不再赘述。

传值

这里写图片描述

  1. ViewBag
    动态类型,随意定制,相对于VIewData比较慢,因为它需要进行解析类型。
    使用方法:
ViewBag.title="张山";
List<Person> person=new List<Person>();
 ViewBag.liming=person;
 //在后台的使用
方式一: @ViewBag.title
 方式二:@foreach(var a in @ViewBag.list1)
{
    <p>@a</p>
}
//复杂类型
   Dictionary<int, String> result = new Dictionary<int, String>();
          result.Add(2, "张三");
          result.Add(4, "李思");
          result.Add(1, "李强");
          result.Add(5, "网名");
          ViewBag.result = result;
@foreach (var item in ViewBag.result)
{ 
    <li>@item.Key:@item.Value</li>
}

在遍历过程中不需要将其转换成指定的类型,因为ViewBag本身就是绑定传过来的类型。
  1. ViewData
    使用方法:
ViewData[“title”]=" 我是标题";
@foreach (var str in ViewData["list1"] as List<string>)
{ 
    <p>@str</p>
}

ViewBag与ViewDate的区别与相同:
1.生命周期相同,进队当前View有效
2.ViewBag的类型不在是字典的兼职对结构,而是动态类型
3.下边的TempData是保存在Session里,Controller每次执行请求的时候,会从Session中现货区TempData,而后清楚Session.获取完整的TmepData数据

  1. TempData,很少使用,在这里不在细说。

视图

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

上边的代码是相当于告诉这一页他要嵌入到~/Views/Shared/_Layout.cshtml”这个页面中,相当于说是~/Views/Shared/_Layout.cshtml”这个页面作为一个架构,而自己写的页面作为一个内容填充进去,具体填充到哪里,需要在~/Views/Shared/_Layout.cshtml”页面中声明声明的方法就是使用 @RenderBody()占位符进行声明。这样目的是为了风格统一,页面简洁,提升加载速度。
这里写图片描述
除此之外还使用@Styles.Render(“/Content/css”)
@Scirpt.Render(“~/bundles/modernizr”)
@Scripts.Render(“~/bundles/jquery”)
@RenderSection(“scripts”, required: false)
等内容进行渲染。上边两句的含义就是在Content目录下找样式相关文件
在Bunder下找js相关文件;在bundlers找jquery相关文件,这里看上去是找不到的。这里的bundler是指的是在BundlersConfig文件下去加载对应的名称,我们可以看一下该配置文件下的内容

using System.Web;
using System.Web.Optimization;

namespace Mvc实战
{
    public class BundleConfig
    {
        // 有关 Bundling 的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=254725
        public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                        "~/Scripts/jquery-{version}.js"));

            bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
                        "~/Scripts/jquery-ui-{version}.js"));

            bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                        "~/Scripts/jquery.unobtrusive*",
                        "~/Scripts/jquery.validate*"));

            // 使用 Modernizr 的开发版本进行开发和了解信息。然后,当你做好
            // 生产准备时,请使用 http://modernizr.com 上的生成工具来仅选择所需的测试。
            bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
                        "~/Scripts/modernizr-*"));

            bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));

            bundles.Add(new StyleBundle("~/Content/themes/base/css").Include(
                        "~/Content/themes/base/jquery.ui.core.css",
                        "~/Content/themes/base/jquery.ui.resizable.css",
                        "~/Content/themes/base/jquery.ui.selectable.css",
                        "~/Content/themes/base/jquery.ui.accordion.css",
                        "~/Content/themes/base/jquery.ui.autocomplete.css",
                        "~/Content/themes/base/jquery.ui.button.css",
                        "~/Content/themes/base/jquery.ui.dialog.css",
                        "~/Content/themes/base/jquery.ui.slider.css",
                        "~/Content/themes/base/jquery.ui.tabs.css",
                        "~/Content/themes/base/jquery.ui.datepicker.css",
                        "~/Content/themes/base/jquery.ui.progressbar.css",
                        "~/Content/themes/base/jquery.ui.theme.css"));
        }
    }
}

所以找到就是这里面对应的目录名称其中,分析 bundles.Add(new ScriptBundle(“~/bundles/jquery”).Include(
“~/Scripts/jquery-{version}.js”));
我们可以发现~/bundles/jquery相当于一个别名,具体内容是其对应的js文件,其中{version}是一个占位符表示可以对应多个不同版本的文件。下边所讲的css样式同样也是在这个文加下进行比对然后加载。

Mvc优点:

MVC开发优势:1.每一个actioin精准对应每一个方法或者说是页面
传值:三个方式 View系列的三个方式
项目穿件约定:约定大于配置
视图展现:采用razor试图引擎,取代<%%>这些样式,提高了开发效率。

视图开发引擎

Razor语法规则
工作原理

我们使用Razor理由
可以看出语法简单,开发便利。
其工作原理:

基本语法

封装在@{}中,行内表达式(变量与函数)以@开头
代码语句以分号结尾,字符串由引号保卫
c#代码对大小写敏感,c#文件扩展名市.cshtml,这些可以说是有razor特点决定的。
举例:

@{
var message="hello world"
}
//行内表达式、变量
<p>hell world@message</p>
//多行语句代码块
@{
    var  greeting="welcome to beijing";
    var weekday=DateTime.Now.DayOfWeek;
    var greetingMessage=greeting+"hello huston it is "+weekday;
}
<p>the greeting is #greetingMessage</p>
//这里多行@符号不需要结束,系统会自动判断是否结束,
扩展语法

数据转换类型
数据转化类型
预设指令
@model 可以定义一个Action里对应的一个模型(经常可以叫它实体类),其中是对动态变量进行实例化,这样可以直接在cshtml文件中调用Model变量,这个模型的实例,需要通过Controller进行传输,如果没有Model间隔为null;注意如果在前天引用model时候前提要引用Model的命名空间。
@section:用来解决试图引擎的,减少代码冗余,使得部分页面可以重复被利用。
section的定义
section的使用

@helper:针对于代码,避免代码冗余
实例如下图
helper指令

@helper show()
{
    <font color="red">
    我的名字:</font>
        }
@show()
//上边代码表示声明一个方法,和调用一个方法,这里声明一个方法我们可以在整个站点下调用该方法,不受所在目录的限制。
注意事项

使用时候的注意事项。
这里写图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uniquewdl

匆忙的人生,总有你喜欢的文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值