MVC-Razor分布视图

什么是分布视图?

Mvc时代的分部视图,web form时代的对应物ascx分部控件。当然MVC对分布视图具有更强的控制能力。

分布视图的优点?

1、分布视图可以使系统插件化(各个功能模块都是独立的,减少开发,增加重用)。

2、分工合作(适应群体开发)。

3、实现简单。

分布视图的实现?

原理:我们都知道MVC是通过Action方法对应到view中的,Action方法可以通过ParticalView方法以PartialViewResult方式返回分布视图。

一般用在Ajax请求部分代码。

具体Dome:

首先,在MVC4中建立一个控制器为:HomeController:

1、在主视图中加载分布视图

我们在控制器中修改代码为:

HomeController:

<span style="font-family:KaiTi_GB2312;font-size:18px;">      public ActionResult Index()
        {
            return View();
        }

        /// <summary>
        /// 加载分布视图的action方法
        /// </summary>
        /// <returns></returns>
        public ActionResult LoginPart()
        {
            return View();
            //不运行分布视图中的加载分布视图的模板页
        }
</span>

添加视图:Index和LoginPart,其中LoginPart选择为分布视图。

Index视图修改代码:

<span style="font-family:KaiTi_GB2312;font-size:18px;">Index:
@{
    ViewBag.Title = "Index";
}

@section scripts{
    <script type="text/javascript">
        var a = "123456";
        window.onload = function () {
            document.getElementById("btnLoadPart").onclick = function () {
                var xhr = new XMLHttpRequest();
                xhr.open("get", "/Home/LoginPart", true);
                xhr.setRequestHeader("If-Modified-Since", 0);
                xhr.onreadystatechange = function () {
                    if (xhr.readyState == 4 && xhr.status == 200) {
                        var htmlNew = xhr.responseText;
                        document.getElementById("divCon").innerHTML = htmlNew;
                    }
                };
                xhr.send(null);

            };
        };
    </script>
}

<input type="button" value="请求分布视图" id="btnLoadPart" />
<div id="divCon"></div>
<h2>Index</h2>
<table>
    <tr>

    </tr>
</table>
</span>

2、无论是分布视图还是普通视图都要首先加载_ViewStart视图

注意:其实所有的视图(不管是不是分布视图)如果没有特殊说明,加载的时候,都会首先加载_ViewStart视图,该视图布局采用Shared文件夹_Layout视图。因此,如果我们在Shared文件夹_Layout视图中编辑,所有的视图都将会跟着改变。

我们编辑_ViewStart视图:

<span style="font-family:KaiTi_GB2312;font-size:18px;">@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
我哈哈哈~~~~
</span>

运行时,单击“请求分布视图”出现该该界面:

我们可以看到图中有两个“我哈哈哈~~~”,因为不但是index视图会加载_ViewStart视图,而且分布视图LoginPart,也会加载_ViewStart视图,因此就会被加载两遍。

我们知道分布视图可以作为视图的一部分被加载到主视图上,那么代码该怎么写?

在Index.cshtml代码中添加代码:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><divid="divCon2">

   @{Html.RenderPartial("~/Views/Home/LoginPart.cshtml");}

    @*在加载index视图的时候,就加载了上面AJax的代码*@

</div></span>

效果:

ok了,这段代码就可以实现在加载主视图的时候就加载了分布视图。

3、如果给分布视图传递参数?

在HomeController中修改LoginPart 函数:

<span style="font-family:KaiTi_GB2312;font-size:18px;">        public ActionResult LoginPart()
        {
           // ViewData["boyFriend"] = "小勇~~~~~" + ViewData["a"];
            ViewData["boyFriend"] = "小勇~~~~~";
            return PartialView();
            //return View();
            //不运行分布视图中的加载分布视图的模板页
        }
</span>

我们给视图传递了一个值ViewData[“boyFriend”],我们从Index中发出请求,效果是这样的:

4、一张图反应视图中的调用关系:

如我们所愿,值被传过来了,我们画出来这个调用关系图:

一张图就很清楚了把,同时要注意的是,如果从index中加载分布视图的时候,如果在控制器中Index函数中定义的ViewData,分布视图是无法获取到这个值的,但是用TempData来定义,分布视图就会获取到。

总结:

做项目中我们大多是很多在一起做,所以免不了是要用到分布视图的,分布视图体现了:化整为零、团队合作的思想。

时间: 2024-08-08 09:41:24

MVC-Razor分布视图的相关文章

MVC添加分布视图做唯一验证

Model里的代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace MvcApplication5.Models { public class zhuceBF { private MyDBDataContext _context = new MyDBDataContext(); //定义一个Bool类型的查询方法 public bool Select(st

ASP.NET MVC Razor视图(2)

昨天介绍了一些Razor的基本语法,几天接着向下说: 补成一个,上次介绍了怎么输出原样的文本,用<text></text>标签,下面再介绍一种语法: @{@:我爱北京}  这个@:我爱北京必须写在@{}C#代码段中,否则报错 1.输出@符号怎么做? 在Razor中,我们用@@输出"@",类似于C#中"//" 2.我们可以在Razor使用Response.Write(),Server,Request,Session,这是为什么呢? 我们反编译.

Asp.Net Mvc Razor视图语法

    Asp.Net Mvc Razor视图语法 [email protected]符号输出变量值 2.使用C#语法嵌套Html标签循环输出NameList的值:使用@{C#语法代码}: 3.输出@符号使用两个@@ 4.服务器注释使用@*注释内容*@ [email protected]:输出文本,或者使用<text></text> 6.在@()括号进行简单的操作或运算 [email protected]()或@{}可以输出带有html标签的字符串 8.Razor可以智能识别邮箱写

体验 ASP.NET Core 1.1 中预编译 MVC Razor 视图

这是从 ASP.NET Core 1.1 官方发布博文中学到的一招,可以在 dontet publish 时将 Razor 视图编译为 .dll 文件. 需要在 project.json 中添加如下配置: 1)在 "dependencies" 中添加: "Microsoft.AspNetCore.Mvc.Razor.ViewCompilation.Design": "1.1.0-preview4-final" 2)在"tools&quo

【兼容写法】HttpServerUtility.Execute 在等待异步操作完成时被阻止。关键词:MVC,分布视图,异步

异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html MVC6之前的版本,对分部视图的异步支持不是很好 问题: 视图里面有分布视图:@{Html.RenderAction("NewProduct", "PartialView", new { count = 10 });} 后端采用异步方法,比如: 其实MVC里面的分布视图有两种调用方法,大多人都是喜欢用第一种,@{Html.RenderAction(&

MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

之前我们详细介绍过分布视图(partial view),在有一些更加复杂的场景下,.net core为我们提供了更加强大的组件 view  component. 可以认为view component是partial view的替代品. 我认为view component是 .net core中非常重要的一个功能,除了跟partial view类似的特征外,view component比较方便带参数和业务逻辑,一般通过layout page调用. 一些典型的应用场景如动态导航菜单,登录框,购物车等

ASP.NET MVC学习之视图篇(1)

一.前言 不知道还有多少读者从第一篇开始一直学习到如今,笔者也会一直坚持将ASP.NET MVC的学习完美的结束掉,然后开始写如何配合其他框架使用ASP.NET MVC的随笔.当然笔者后面的随笔如果没有特殊说明使用的都是ASP.NET MVC 4,因为笔者认为只要精通即可. 二.正文 1.自定义视图引擎 相信很多人都知道在控制器中一个动作方法返回一个View之后,ASP.NET MVC默认会到Views下对应的控制器名的文件夹下寻找和这个动作方法同名的视图(如果你指定了视图名则会按照你指定的视图

ASP.NET MVC 4 (五) 视图

视图引擎与视图 多数情况下控制器action方法返回ViewResult对象,MVC内建action调用器ControllerActionInvoker负责调用控制器action方法并调用视图引擎处理ViewResut,由视图引擎将ViewResult转化为ViewEngineResult对象,ViewEngineResult对象内含实现IView接口的视图对象,最终MVC框架调用视图对象的Render的方法渲染输出结果.下面还是以例子来演示这个过程,先来看看相关接口和类的定义与实现: publ

Asp.net MVC 移除视图引擎(WebFormViewEngine或者RazorViewEngine)

ASP.NET MVC 有两种视图引擎,分别asp.net语法的:WebFormViewEngine 与Razor视图的新语法:RazorViewEngine. 在MVC默认查找视图时,会按照指定的顺序查找,进行匹配视图,当我们的MVC程序未找到视图时,页面中会出现错误信息: 看到图片由可可知,它会先执行webfrom视图引擎查找,其次才是razor视图引擎,而现在ASP.NET MVC 项目通常只所有一种视图引擎就 已经足够了.如果是这样的话,另外一种视图引擎显得多余了,(里面多少也会给性能带