Html.Partial和Html. RenderPartial用法

  1. Html.Partial和Html. RenderPartial用法

Html.partial和RenderPartial的用法与区别
Html.partial和RenderPartial都是输出html片段,区别在于
Partial是将视图内容直接生成一个字符串并返回(相当于有个转义的过程),RenderPartial方法是直接输出至当前 HttpContext(因为是直接输出,所以性能好)。因此它们在视图中的使用方式是不同的:
MVC2:
输出到 HttpContext
输出为string 直接到页面
MVC3:
@Html.Partial("BasicChart")
@{
Html.RenderPartial("BasicChart");
}
Html.partial和RenderPartial的其它三个重载很有用,第二个重载@{Html.RenderPartial("BasicChart",model);}
用这个重载可以在部分视图里使用强类型,然后在主视图中使用第二个参数传model过去,而不用controller
比如从list中传其中一项myClass过去
第三个重载用来传ViewData同理,如:@{Html.RenderPartial("BasicChart",ViewData["myData"]);}

示例:

<div id="logindisplay">

                @*@Html.Partial("_LogOnPartial")*@

                @{

                    Html.RenderPartial("_LogOnPartial");

                 }

            </div>

 

另:相关资料:

@RenderBody@RenderSection@RenderPageHtml.RenderPartialHtml.RenderAction的作用和区别

1. RenderBody
在Razor引擎中没有了“母版页”,取而代之的是叫做“布局”的页面(_Layout.cshtml)放在了共享视图文件夹中。在这个页面中,会看到标签里有这样一条语句:
@RenderBody()
其实它的作用和母版页中的服务器控件类似,当创建基于此布局页面的视图时,视图的内容会和布局页面合并,而新创建视图的内容会通过布局页面的@RenderBody()方法呈现在标签之间。
这个方法不需要参数,而且只能出现一次。

2. RenderPage
从名称可以猜出来这个方法是要呈现一个页面。比如网页中固定的头部可以单独放在一个共享的视图文件中,然后在布局页面中通过这个方法调用,用法如下:
@RenderPage(“~/Views/Shared/_Header.cshtml”) 
带参数
@RenderPage(“~/Views/Shared/_Header.cshtml”,new{parm="my",parm2="you")
调用页面获取参数:
//获取 RenderPage() 传递过来的参数
@PageData["param"]

3. RenderSection
布局页面还有节(Section)的概念,也就是说,如果某个视图模板中定义了一个节,那么可以把它单独呈现出来,用法如下:
@RenderPage(“~/Views/Shared/_Header.cshtml”) 
@RenderBody() 
//模板里添加了一个节
@RenderSection(“head”)
当然还要在视图中定义节,否则会出现异常:
@section head{ 
//do
}
为了防止因缺少节而出现异常,可以给RenderSection()提供第2个参数:
@RenderSection("SubMenu", false)

@if (IsSectionDefined("SubMenu"))
{
@RenderSection("SubMenu", false)
}
else
{
<p>SubMenu Section is not defined!</p>
}

4.@Html.Partial
 Partial 每次都会创建自己的 TextWriter 实例并且把内容缓存在内存中. 最后把所有 writer输出的内容发送到一个 MvcString对象中
更多时候我们会使用 @{ Html.RenderPartial("Details"); } 而不是@Html.Partial

RenderPage()和RenderPartial()的区别

RenderPage()调用的页面只能使用其传递过去的数据。
而RenderPartial()是可以使用viewdata,model等数据的。

Html.RenderPartial和Html.RenderAction的区别

Html.RenderPartial适合用在重覆使用的UserControl,并且只需要透过Model来呈现内容,或是对于广告的UserControl也适合使用。 Html.RenderAction则会先去呼叫Controller的Action方法,如果此UserControl是需要透过资料库取得资料来呈现(透过Action来读取资料库),此时会比较适合使用此方式。

5.Html.Partial("MyView")

以MvcHtmlString形式返回试图流,遵循标准的路由规则。

Renders the "MyView" view to an MvcHtmlString. It follows the standard rules for view lookup (i.e. check current directory, then check the Shared directory).

Html.RenderPartial("MyView")

与Html.Partial()类似,区别是直接输入到页面,不进行缓存。

Does the same as Html.Partial(), except that it writes its output directly to the response stream. This is more efficient, because the view content is not buffered in memory. However, because the method does not return any output, @Html.RenderPartial("MyView") won't work. You have to wrap the call in a code block instead: @{Html.RenderPartial("MyView");}.

RenderPage("MyView.cshtml")

返回带路径、文件名等的特殊视图,同Heml.RenderPartial()一样直接输出,不进行缓存。可以传递model变量。

Renders the specified view (identified by path and file name rather than by view name) directly to the response stream, like Html.RenderPartial(). You can supply any model you like to the view by including it as a second parameter

RenderPage("MyView.cshtml",MyModel)

I prefer

@RenderPage("_LayoutHeader.cshtml")

Over

@{Html.RenderPartial("_LayoutHeader");}

Only because the syntax is easier and it is more readable. Other than that there doesn't seem to be any differences functionality wise.

 

 

 

2.<span>@Html.Raw("aaa<br/>bb")</span>

输出为aaa

       bb

 

@{

    ViewBag.Title = "Index<br/>aa";

}

<span>@ViewBag.Title</span>

输出为Index<br/>aa

 

 

 

 

 

asp.net MVC3.0 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction

1、带有Render的方法返回值是void,在方法内部进行输出;不带的返回值类型为MvcHtmlString,所以只能这样使用:

@Html.Partial 对应 @{Html.RenderPartial(....);}

@Html.Action 对应 @{Html.RenderAction(....);}

2、Html.Partial可以直接提供用户控件名作为参数,

而Html.Action需要有对应的Action,在Action内部返回PartailResult(即retun PartialView())。

3、对于简单的没有任何逻辑的用户控件,推荐使用Html.Partial;对于需要设置一些Model的用户控件,推荐使用Html.Action。当然,有Model数据也是可以使用Html.Partial方法的,可以看方法的重载。

4、使用Html.Action有个好处,就是可以根据不同的场景选择不同的用户控件。比如:@Html.Action("UserInfoControl")在对应的 UserInfoControl这个Action中,在用户未登录的时候,可以retun PartialView("LogOnUserControl");登录后,可以retun PartialView("UserInfoControl");

Html.PartialHtml.RenderPartial, Html.ActionHtml.RenderAction的区别

Html.Partial返回的是一个字符串, Html.RenderPartial会将内容写入到response中, 返回void

在Razor中,下面2中写法是等价的:

@Html.Partial("ViewName") @{Html.RenderPartial("ViewName");  }

你可以使用 Html.Partial, 把Partial View的输出保存到变量中, 但是Html.RenderPartial不行.

Html.RenderPartial会在执行的时候,直接把输出写进Response.

Html.Action和Html.RenderAction的区别和上面的就是一样的了。

 

 

 

 

3. MVC Ajax Helpers

在MVC中要实现Ajax有很多的方式,有微软自己的MicrosoftAjax,也可以用JQuery的AJax来实现,如果对其他的JavaScript框架熟悉,还可以采用其他的实现方案,比如说Prototype等等。

以下是微软自己的实现方案。

需要预先加载的JavaScript文件:

    <script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script>
 

在MVC中已经提供了下面几个现成的HTML Hepler:

  • Ajax.ActionLink()
  • Ajax.BeginForm()
  • Ajax.RouteLink()
  • Ajax.BeginRouteForm()

Ajax.ActionLink

使用ActionLink发送异步请求的方法:

View

<div id="myPnl" style="width: 300px; height: 30px; border: 1px dotted silver;">
</div>
@Ajax.ActionLink("Click Me", "GetTime", new AjaxOptions { UpdateTargetId = "myPnl" })

Controller

public ActionResult GetTime()
{
    return Content(DateTime.Now.ToString());
}

以上示例使用ActionLink超链接发送请求到GetTime,返回一个ContentResult,通过AjaxOptions中的UpdateTargetId属性指定了需要更新的页面元素。

AjaxOptions中还有其他可以指定的属性:

Confirm

等效于javascript中的return confirm(msg),在点击该链接时先提示需要确认的信息。

HttpMethod

指定使用Get或者是Post方式发送Http请求

InsertMode

指定使用哪一种方式在指定的UpdateTargetId元素更新数据,可以有三种方式:

 "InsertAfter",   "InsertBefore", or "Replace" 。默认为:Replace

LoadingElementDuration

Loading元素显示的时间

LoadingElementId

可以指定在Http请求期间显示的Loading元素

OnBegin

在Http请求之前执行的javascript方法

OnComplete

在Http请求结束时执行的方法

OnFailure

在Http请求失败时执行的方法

OnSuccess

在Http请求成功时执行的方法

UpdateTargetId

Http请求更新的页面元素

Url

Http请求的Url

关于AjaxOptions中各方法的使用方法,在之前关于ActionResult的介绍的文章中有相关的列子:

JsonResult

注意点

  • OnComplete和OnSuccess的区别:OnComplete是获取了Http请求时引发的,此时页面还没有进行更新,OnSuccess是在页面已经更新后引发的。
  • ActionLink中的actionName和AjaxOption中的Url的关系:两者分别产生的HTML如下,但是执行的结果相同,希望有高手能解释下这两者有无区别。

<a href="/Home/GetTime" data-ajax-update="#myPnl" data-ajax-mode="replace" data-ajax="true">Click Me</a> 
<a href="/" data-ajax-url="Home/GetTime" data-ajax-update="#myPnl" data-ajax-mode="replace" data-ajax="true">Click Me</a>

Ajax.BeginForm

该Html Hepler可以实现使用Ajax方式提交Form,在指定的页面元素中显示提交的结果。

View

@model MvcAjax.Models.UserModel
@{
    ViewBag.Title = "AjaxForm";
}
 
<div id="myPnl" style="width: 300px; height: 30px; border: 1px dotted silver;">
</div>
 
@using (Ajax.BeginForm("SaveUser", new AjaxOptions { UpdateTargetId = "myPnl" }))
{
    <table>
        <tr>
            <td>
                @Html.LabelFor(m => m.UserName)
            </td>
            <td>
                @Html.TextBoxFor(m => m.UserName)
            </td>
        </tr>
        <tr>
            <td>
                @Html.LabelFor(m => m.Email)
            </td>
            <td>
                @Html.TextBoxFor(m => m.Email)
            </td>
        </tr>
        <tr>
            <td>
                @Html.LabelFor(m => m.Desc)
            </td>
            <td>
                @Html.TextBoxFor(m => m.Desc)
            </td>
        </tr>
        <tr>
            <td colspan="2">
                <input type="submit" value="Submit" />
            </td>
        </tr>
    </table>
} 

Model

using System.ComponentModel.DataAnnotations;
 
namespace MvcAjax.Models
{
    public class UserModel
    {
        [Display(Name = "Username")]
        public string UserName { get; set; }
 
        [Display(Name = "Email")]
        public string Email { get; set; }
 
        [Display(Name = "Description")]
        public string Desc { get; set; }
    }
}

Controller

public ActionResult AjaxForm()
{
    return View();
}
 
[HttpPost]
public ActionResult SaveUser(UserModel userModel)
{
    //Save User Code Here
    //......
 
    return Content("Save Complete!");
}

以上示例代码实现了采用Ajax提交Form数据的大概方法,在Ajax.BeginForm中同样使用AjaxOptions来设置Ajax请求的参数,和Ajax.ActionLink中的使用方法相同。

其他:

在介绍JavaScriptResult时曾经提到了该ActionResult在普通的请求中是直接当作文件Reponse出的,但是在Ajax请求中,便可以使用该Result,并且执行Result中的JavaScript。

比如将上面的Conntroller更改为以下代码:

[HttpPost]
public ActionResult SaveUser(UserModel userModel)
{
    //Save User Code Here
    //......
 
    //return Content("Save Complete!");
    return JavaScript("alert('Save Complete!');");
}   

便可在执行改Ajax请求之后执行JavaScriptResult中的语句。

转载于:https://www.cnblogs.com/dxqNet/p/6592746.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456196.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算术编码简单研究

算术编码 是一种无损数据压缩方法&#xff0c;也是一种熵编码的方法。和其它熵编码方法不同的地方在于&#xff0c;其他的熵编码方法通常是把输入的消息分割为符号&#xff0c;然后对每个符号进行编码&#xff0c;而算术编码是直接把整个输入的消息编码为一个数&#xff0c;一个…

Thinkphp5 还有这种操作?

2019独角兽企业重金招聘Python工程师标准>>> 在 _initialize 中取出 控制器名和方法名 define(CONTROLLER_NAME,Request::instance()->controller()); define(MODULE_NAME,Request::instance()->module()); define(ACTION_NAME,Request::instance()->actio…

【R】语言第五课----画图

?plot#高级绘图函数 可以完整地绘制出一张图 ?mtcars plot(mtcars$wt) plot(mtcars[,1:2]) plot(mtcars) plot(mtcars$wt,mtcars$disp) plot(mtcars$wt,mtcars$disp,typep) plot(mtcars$wt,mtcars$disp,typel) plot(mtcars$wt,mtcars$disp,typeb) plot(mtcars$wt,mtcars$disp…

Solidworks如何将参考平面的图形投影到某曲面上

1 画好草图&#xff0c;点击曲线-分割线 2 选择要投影的草图和被投影的面&#xff08;那个球面&#xff09;&#xff0c;最后效果如下图所示 3 为了获取连续的轨迹&#xff0c;我们可以再次选择这个草图&#xff0c;然后在投影面中选择平面&#xff0c;最后得到的图形如下图所示…

向极限挑战:算术编码 (转)

向极限挑战&#xff1a;算术编码 (转) http://blog.csdn.net/hhf383530895/archive/2009/08/24/4478605.aspx 我们在上一章中已经明白&#xff0c;Huffman 编码使用整数个二进制位对符号进行编码&#xff0c;这种方法在许多情况下无法得到最优的压缩 效果。假设某个字符的出…

np.random.seed(0)作用

在用python时时常会看到如下代码&#xff1a; import numpy as np np.random.seed(0) 其中np.random.seed(0)的作用是使得随机数据可预测&#xff0c;当我们设置相同的seed&#xff0c;每次生成的随机数相同。 如果不设置seed&#xff0c;则每次会生成不同的随机数&#xf…

发送邮件被退回,提示: Helo command rejected: Invalid name 错误

我自己配置的 postfix dovecot server&#xff0c; 配置了outlook 后&#xff0c; 相同的账号。 在有的电脑上能收发成功&#xff0c; 在有的电脑上发送邮件就出现退信。提示 Helo command rejected: Invalid name 错误。经过分析&#xff0c; 原来是计算机名的问题。 计算机名…

Series和DataFrame、相关性及NaN处理

pandas核心数据结构 pandas是以numpy为基础的&#xff0c;还提供了一些额外的方法 Series series用来表示一维数据结构&#xff0c;与python内部的数组类似&#xff0c;但多了一些额外的功能。 series内部由两个相互关联的数组组成&#xff1a;主数组用来存放数组&#xff…

Hive谓词解析过程分析

where col1 100 and abs(col2) > 0在Hive中的处理过程 where过滤条件称为谓词predicate。 以上where过滤条件在经过Hive的语法解析后&#xff0c;生成如下的语法树&#xff1a; TOK_WHERE AND TOK_TABLE_OR_C…

算术编码(Arithmetic Coding)源代码

Ian H. Witten、Radford M. Neal和John G. Cleary在1987年发表了一篇启发性的论文。论文中描述了一种基于整数运算的通用算术编码器&#xff0c;而且还给出了由计算错误导致的效率低下的分析。以下源代码来自于这篇论文&#xff1a;《基于算术编码的数据压缩》&#xff08;Arit…

pandas读写各种类型数据

read_X()通常是pandas模块下的&#xff0c;to_X()是dataframe的方法 CSV 读取 使用pandas.read_csv()方法&#xff0c;返回的是一个dataframe csv默认是以"&#xff0c;"分割的 csv文件内容 1、read_csv()默认以第一行数据作为标题 2、调用dataframe的head()方法…

python 类装饰器

1 装饰器无参数 class tracer: def __init__(self,func): self.calls 0 self.func func def __call__(self,*args): self.calls 1 print(call %s to %s %(self.calls, self.func.__name__)) self.func(*args) tracer def spam(a, b, c): print(a b c) …

【数据分析】使用pandas和numpy分析美国大选献金项目

1. 数据载入与总览 1.1 数据加载 #绘图工具 import matplotlib.pyplot as plt %matplotlib inline #数据处理工具 import numpy as np import pandas as pd from pandas import Series,DataFrame#数据路径自己指定&#xff0c;本案例数据路径就在当前文件夹下面子文件夹usa_e…

《容器技术系列》一1.4 Docker运行案例分析

本节书摘来华章计算机《容器技术系列》一书中的第1章 &#xff0c;第1.4节&#xff0c;孙宏亮 著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 1.4 Docker运行案例分析 1.3节着重介绍了Docker架构中各个模块的功能&#xff0c;学完后我们可以对Docker的架构有一…

算术编码的原理与分析

转自&#xff1a;http://kulasuki115.blogcn.com/diary,201492702.shtml 前言 人类已进入信息时代&#xff0c;信息时代的重要特征是信息的数字化&#xff0c;人们越来越依靠计算机获取和利用信息&#xff0c;这就需要对信息的表示、存储、传输和处理等关键技术进行研究。我们…

3月22日AM

看了思维章节精讲视频课&#xff0c;并且总结了部分思维章节内容转载于:https://www.cnblogs.com/bgd140206102/p/6601440.html

阿里巴巴Dubbo实现的源码分析

Dubbo概述Dubbo是阿里巴巴开源出来的一个分布式服务框架&#xff0c;致力于提供高性能和透明化的RPC远程服务调用方案&#xff0c;以及作为SOA服务治理的方案。它的核心功能包括&#xff1a; remoting:远程通讯基础&#xff0c;提供对多种NIO框架抽象封装&#xff0c;包括“同步…

POJ 2106-Boolean Expressions,双栈运用类似表达式求值!

Boolean Expressions 首先声明此题后台可能极水&#xff08;毕竟这种数据不好造&#xff01;&#xff09;。昨天写了一天却总是找不到bug&#xff0c;讨论区各种数据都过了&#xff0c;甚至怀疑输入有问题&#xff0c;但看到gets也可以过&#xff0c;难道是思路错了&#xff1f…

H264 CAVLC 研究

目录 1 CAVLC概念 2 CAVLC原理 3 CAVLC编码流程 4 CAVLC解码流程 展开全部 1 CAVLC概念 2 CAVLC原理 3 CAVLC编码流程 4 CAVLC解码流程 收起 摘要纠错编辑摘要 CAVLC即基于上下文的自适应变长编码。H.264标准中使用CAVLC对4*4模块的亮度和色度残差数据进行编码。 CAVLC-CAVLC…

【MySQL 】学习笔记千行总结

/* Windows服务 */ -- 启动MySQLnet start mysql -- 创建Windows服务sc create mysql binPath mysqld_bin_path(注意&#xff1a;等号与值之间有空格)/* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码SHOW PROCESSLIST -- 显示哪些线程正在运行 SHOW VARIABLES…