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.pswp.cn/news/456196.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456196.shtml
英文地址,請注明出處:http://en.pswp.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…