Html.Partial 대 Html.RenderPartial & Html.Action 대 Html.RenderAction
ASP.NET MVC에서 다음의 차이점은 무엇입니까?
Html.Partial
과Html.RenderPartial
Html.Action
과Html.RenderAction
Html.Partial
문자열을 반환합니다. 내부적으로 Html.RenderPartial
호출 Write
하고 void
.
기본 사용법은 다음과 같습니다.
// Razor syntax
@Html.Partial("ViewName")
@{ Html.RenderPartial("ViewName"); }
// WebView syntax
<%: Html.Partial("ViewName") %>
<% Html.RenderPartial("ViewName"); %>
위의 스 니펫에서 두 호출 모두 동일한 결과를 생성합니다.
하나의 출력을 저장할 수 있지만, Html.Partial
가변 또는 방법에서 반환 한 수 와 이렇게 Html.RenderPartial
. 결과는 Response
실행 / 평가 중에 스트림에 기록됩니다 .
이는 Html.Action
및 에도 적용됩니다 Html.RenderAction
.
@ Html.Partial을 상위 페이지에 복사 된 HTML 코드로 생각하십시오. @ Html.RenderPartial을 상위 페이지에 통합 된 .ascx 사용자 컨트롤로 생각하십시오. .ascx 사용자 컨트롤에는 훨씬 더 많은 오버 헤드가 있습니다.
'@ Html.Partial' 은 부모와 함께 인라인으로 생성되는 html 인코딩 문자열을 반환합니다. 부모의 모델에 액세스합니다.
'@ Html.RenderPartial' 은 .ascx 사용자 정의 컨트롤에 해당하는 것을 반환합니다. 페이지의 ViewDataDictionary의 자체 복사본을 가져 오며 RenderPartial의 ViewData에 대한 변경 사항은 부모의 ViewData에 영향을주지 않습니다.
반사를 사용하여 우리는 다음을 찾습니다.
public static MvcHtmlString Partial(this HtmlHelper htmlHelper, string partialViewName, object model, ViewDataDictionary viewData)
{
MvcHtmlString mvcHtmlString;
using (StringWriter stringWriter = new StringWriter(CultureInfo.CurrentCulture))
{
htmlHelper.RenderPartialInternal(partialViewName, viewData, model, stringWriter, ViewEngines.Engines);
mvcHtmlString = MvcHtmlString.Create(stringWriter.ToString());
}
return mvcHtmlString;
}
public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName)
{
htmlHelper.RenderPartialInternal(partialViewName, htmlHelper.ViewData, null, htmlHelper.ViewContext.Writer, ViewEngines.Engines);
}
차이점은 첫 번째는 반환 MvcHtmlString
하지만 두 번째 ( Render..
)는 응답에 직접 출력합니다.
내가 찾은 내용은 다음과 같습니다.
뷰로 보낼 모델이없고 변수에 저장할 필요가없는 많은 html이있을 때 RenderAction을 사용 합니다.
뷰로 보낼 모델이없고 변수에 저장해야하는 약간의 텍스트가있을 때 Action을 사용 합니다.
뷰로 보낼 모델이 있고 변수에 저장할 필요가없는 많은 html이있을 때 RenderPartial을 사용 합니다.
뷰로 보낼 모델이 있고 변수에 저장해야하는 약간의 텍스트가있을 때 부분을 사용 합니다.
RenderAction 및 RenderPartial 이 더 빠릅니다.
나에 따르면 Html.RenderPartial @Html.RenderPartial()
보다 빠른 실행이 @Html.Partial()
Output에 빠르게 응답합니다.
을 사용할 때 @Html.Partial()
내 웹 사이트를로드하는 데 더 많은 시간이 걸립니다.@Html.RenderPartial()
@Html.Partial
그리고 @Html.RenderPartial
당신의 부분보기 모델은 상위 모델의 대응이 때 사용되는, 우리는이를 호출 할 조치 방법을 만들 필요가 없습니다.
@Html.Action
그리고 @Html.RenderAction
당신의 부분보기 모델은 상위 모델로부터 독립 할 때 페이지에있는 모든 위젯 유형의 컨텐츠를 표시 할 때 기본적으로 사용되는 사용됩니다. 뷰에서 메서드를 호출하는 동안 부분 뷰 결과를 반환하는 작업 메서드를 만들어야합니다.
질문에 대한 추가 정보 :
"Html.RenderPartial ()이 부분 뷰의 이름만으로 호출되면 ASP.NET MVC는 호출 뷰 템플릿에서 사용하는 동일한 Model 및 ViewData 사전 개체를 부분 뷰에 전달합니다."
Professional ASP.NET MVC 1.0의 "NerdDinner"
The return type of Html.RenderAction
is void
that means it directly renders the responses in View where the return type of Html.Action
is MvcHtmlString
You can catch its render view in controller and modify it by using following method
protected string RenderPartialViewToString(string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = ControllerContext.RouteData.GetRequiredString("action");
ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
This will return the Html string of the View.
This is also applicable to Html.Partial
and Html.RenderPartial
Partial or RenderPartial: No need to create action method. use when data to be display on the partial view is already present in model of current page.
Action or RenderAction: Requires child action method. use when data to display on the view has independent model.
Differences:
The return type of
RenderPartial
isvoid
, where asPartial
returnsMvcHtmlString
Syntax for invoking
Partial()
andRenderPartial()
methods in Razor views@Html.Partial("PartialViewName")
@{ Html.RenderPartial("PartialViewName"); }Syntax for invoking
Partial()
andRenderPartial()
methods in webform views
[%: Html.Partial("PartialViewName") %]
[% Html.RenderPartial("PartialViewName"); %]
The following are the 2 common interview questions related to Partial()
and RenderPartial()
When would you use Partial()
over RenderPartial()
and vice versa?
The main difference is that RenderPartial()
returns void and the output will be written directly to the output stream, where as the Partial()
method returns MvcHtmlString
, which can be assigned to a variable and manipulate it if required. So, when there is a need to assign the output to a variable for manipulating it, then use Partial(), else use RenderPartial().
Which one is better for performance?
From a performance perspective, rendering directly to the output stream is better. RenderPartial()
does exactly the same thing and is better for performance over Partial()
.
Html.Partial
: returns MvcHtmlString
and slow
Html.RenderPartial
: directly render/write on output stream and returns void
and it's very fast in comparison to Html.Partial
For "partial" I always use it as follows:
If there's something you need to include in a page that you need to go via the controller (like you would with an Ajax call) then use "Html.RenderPartial".
If you have a 'static' include that isn't linked to a controller per-se and just in the 'shared' folder for example, use "HTML.partial"
@Html.Partial
returns view in HTML-encoded string and use same view TextWriter
object. @Html.RenderPartial
this method return void
. @Html.RenderPartial
is faster than @Html.Partial
The syntax for PartialView
:
[HttpGet]
public ActionResult AnyActionMethod
{
return PartialView();
}
'Nice programing' 카테고리의 다른 글
Android에서 경고 대화 상자를 표시하려면 어떻게합니까? (0) | 2020.09.27 |
---|---|
git 브랜치 이름을 지정하는 데 일반적으로 사용되는 관행의 예는 무엇입니까? (0) | 2020.09.27 |
새 탭 또는 창에서 링크 열기 (0) | 2020.09.27 |
PHP에서 stdClass는 무엇입니까? (0) | 2020.09.27 |
HTTP POST 웹 요청을 만드는 방법 (0) | 2020.09.27 |