Html.Partial vs Html.RenderPartial & Html.Action vs Html.RenderAction


Answers:


1241

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ක්‍රියාත්මක කිරීමේදී / ඇගයීමේදී ප්‍රති result ලය ධාරාවට ලියා ඇත .

ද මෙය වලංගු Html.Actionහා Html.RenderAction.


71
ඔබ දන්නවාද ඔබ එකකට වඩා එකක් භාවිතා කරන්නේ ඇයි කියා?
ජේසන්

156
කාර්ය සාධනය අනුව මෙහි පිළිතුරු දී ඇති පරිදි RenderPartial භාවිතා කිරීම වඩා හොඳය: stackoverflow.com/questions/2729815/…
Vlad Iliescu

13
ප්‍රති result ලය විචල්‍යයක් ලෙස ගබඩා කිරීම ගැන ස්තූතියි. විදැහුම්කරණ කවුන්ටරය හරහා අර්ධ හෝ ක්‍රියාව භාවිතා කිරීමට හේතුව මෙයයි.
ඩේවිඩ් කස්සා

8
Html.Partial()රේසර් සමඟ වඩාත් චතුර ලෙස වාක්‍ය ඛණ්ඩයක් ඇති කිරීම සඳහා නිර්මාණය කරන ලදි. @ ව්ලැඩ් පැවසූ පරිදි Html.RenderPartial()වඩාත් කාර්යක්ෂම වේ.
සහි ආශර්

2
_Togahi එය _LoginPartial සඳහා MVC ව්‍යාපෘති අච්චුවේ භාවිතා කරන්නේ ඇයිද යන්න පැහැදිලි කරයි. ස්තූතියි.
නිත්‍ය මයික්

86

මව් පිටුවට පිටපත් කළ HTML කේතයක් ලෙස @ Html.Partial ගැන සිතන්න. මව් පිටුවට ඇතුළත් කර ඇති .ascx පරිශීලක පාලනයක් ලෙස @ Html.RenderPartial ගැන සිතන්න. .Ascx පරිශීලක පාලනයට වඩා ඉහළින් ඇත.

'@ Html.Partial' මඟින් html කේතනය කරන ලද නූලක් ලබා දෙයි. එය දෙමව්පියන්ගේ ආකෘතියට ප්රවේශ වේ.

'@ Html.RenderPartial' .ascx පරිශීලක පාලනයට සමාන අගයක් ලබා දෙයි. එය පිටුවේ ViewDataDictionary හි පිටපතක් ලබා ගන්නා අතර RenderPartial's 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);
}

3
ඔබ කියන්නේ Html.RenderPartial වලට වඩා Html.Partial වඩා හොඳ කාර්ය සාධනයක් ඇති බවයි?
numaroth

15
ඔව් සහ නැත, Html.Partial පේළිගත කර ඇති අතර එය සම්පත් අඩු නමුත් වැඩි කාලයක් ගතවේ. Html.RenderPartial වෙන වෙනම විදහා දක්වනු ලබන අතර එබැවින් වේගවත් වේ, නමුත් වඩා සම්පත් අවශ්‍ය වේ. ඔබට ඉහළ පරිමාවකින් යුත් රථවාහන තදබදයක් ඇත්නම් සම්පත් භාවිතය අඩු කිරීම සඳහා Html.Partial අනුග්‍රහය දක්වන්න. ඔබට රථවාහන පරිමාවේ නිතර වෙනස්වීම් තිබේ නම් Html.RenderPartial වෙත අනුග්‍රහය දක්වන්න.
කෝඩ්බොන්

4
මගේ මතය අනුව, එය අනෙක් පැත්තයි: RenderPartial නිසැකවම ප්‍රතිදාන ප්‍රවාහයට සෘජුවම ලියන බැවින් වඩා හොඳ කාර්ය සාධනයක් ඇත. අර්ධ වශයෙන් අභ්‍යන්තරව එකම ක්‍රමය හැඳින්වුවද, එය ස්ට්‍රිං රයිටරයකට ලියන අතර එය MvcHtmlString ලෙස ආපසු ලබා දී අවසානයේ ප්‍රතිදාන ප්‍රවාහයට ලියා ඇත. එබැවින් එය වැඩි මතකයක් වෙන් කරයි.
slfan

2
Ret බ්‍රෙට් ජෝන්ස් “සම්පත් තීව්‍ර” යන්නෙන් ඔබ අදහස් කරන්නේ කුමක්ද? ඒක නිසා Partialයම් හෙයකින් බවට පරිවර්තනය කර තිබෙන්නේ අදහස් නොවේ එය අසම්මිතික ඉටු කරනවා - තරමක් විරුද්ධ - මම ඔයාට කියා හැකි ආකාරය දැකීමට නොහැකි RenderPartial", වඩාත් පුළුල්ව සම්පත්" ඇත.
ඩයි

59

මෙන්න මම සොයාගත් දේ:

ඔබට දර්ශනයට යැවීමට ආකෘතියක් නොමැති විට සහ විචල්‍යයක ගබඩා කිරීමට අවශ්‍ය නොවන නැවත ගෙන ඒමට html විශාල ප්‍රමාණයක් ඇති විට RenderAction භාවිතා කරන්න .

දර්ශනයට යැවීමට ඔබට ආකෘතියක් නොමැති විට සහ විචල්‍යයක ගබඩා කළ යුතු නැවත ගෙන ඒම සඳහා පෙළ ටිකක් ඇති විට ක්‍රියාව භාවිතා කරන්න .

ඔබට දර්ශනයට යැවීමට ආකෘතියක් ඇති විට RenderPartial භාවිතා කරන්න , විචල්‍යයක ගබඩා කිරීමට අවශ්‍ය නොවන html විශාල ප්‍රමාණයක් ඇත.

දර්ශනයට යැවීමට ඔබට ආකෘතියක් ඇති විට අර්ධ වශයෙන් භාවිතා කරන්න , එවිට විචල්‍යයක ගබඩා කළ යුතු පෙළ ටිකක් තිබේ.

RenderAction සහ RenderPartial වේගවත් වේ.


2
පිළිතුරු දීම (ඇයි?) හොඳම පිළිතුර බැවින් මෙය මට වඩාත් සුදුසුය.
YEH

55

වෙනස පළමුව යමෙක් ප්‍රතිචාරයක් ලබා දෙන MvcHtmlStringනමුත් දෙවන ( Render..) ප්‍රතිදානයන් කෙළින්ම ලබා දෙයි.


MvcHtmlString ප්‍රතිචාරයටද එකතු නොවේද?
ෂැඩ්

Shad, Html.Partial () ක්‍රම මගින් MvcHTMLString නැවත ලබා දෙයි, එය රේසර් වීව් එන්ජිම මඟින් ප්‍රතිචාර ශරීරයට අන්තර්ගතය එක් කිරීමට භාවිතා කරයි.
ජොනී

21

මට අනුව Html.RenderPartial @Html.RenderPartial()වලට වඩා වේගවත් ක්‍රියාත්මක @Html.Partial()කිරීමක් ප්‍රතිදානයට ඉක්මන් ප්‍රතිචාරයක් ලබා දෙයි.

මොකද මම භාවිතා කරන විට @Html.Partial(), මගේ වෙබ් අඩවිය පැටවීමට වඩා වැඩි කාලයක් ගත වේ @Html.RenderPartial()


21

@Html.Partialහා @Html.RenderPartialභාවිතා ඔබගේ අර්ධ දැක්ම ආදර්ශ මව් ආකෘතිය ලිපි වන විට, අප මෙම කැඳවීමට කිසියම් ක්රියාමාර්ගයක් ක්රමය නිර්මාණය කිරීමට අවශ්ය නැත.

@Html.Actionහා @Html.RenderActionවිට ඔබේ අර්ධ දැක්ම ආකෘතිය භාවිතා ස්වාධීන ඔබ පිටුවේ ඕනෑම විජට් වර්ගය අන්තර්ගත පණිවුඩය ප්රදර්ශනය කිරීමට අවශ්ය විට මූලික වශයෙන් එය භාවිතා කරනු ඇත, මව් ආදර්ශ සිට ඇත. ඔබ ක්‍රියාකාරී ක්‍රමයක් නිර්මාණය කළ යුතු අතර එය දෘෂ්ටි කෝණයෙන් ක්‍රමය ඇමතීමේදී අර්ධ දර්ශන ප්‍රති result ලයක් ලබා දෙයි.


3
හොඳ පිළිතුරක්, මන්ද ඔබ අර්ධ ඕවර් ඇක්ෂන් භාවිතා කරන්නේ කවදාද යන්න පැහැදිලි කරන බැවිනි
රාක්ලොස්

15

ප්‍රශ්නය ගැන වැඩි විස්තර:

"අර්ධ දෘෂ්ටියේ නමක් සහිතව Html.RenderPartial () කැඳවූ විට, ASP.NET MVC, ඇමතුම් දර්ශන අච්චුව භාවිතා කරන එකම ආදර්ශ සහ ViewData ශබ්ද කෝෂ වස්තූන් අර්ධ දර්ශනයට ලබා දෙනු ඇත."

වෘත්තීය ASP.NET MVC 1.0 වෙතින් “NerdDinner”


9

නැවත වර්ගය Html.RenderActionවේ voidඑය සෘජුවම නැවත වර්ගය එහිදී දැක්ම තුළ ප්රතිචාර කෙරෙන්නේය බව මාර්ගයෙන් Html.Actionවේ MvcHtmlStringඔබ පාලකය එහි දිය දැක්ම අල්ලා හා පහත සඳහන් ක්රමය භාවිතා කර වෙනස් කරගත හැක

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();
        }
    }

මෙය දර්ශනයේ HTML නූල නැවත ලබා දෙනු ඇත.

ද මෙය අදාළ වන්නේ Html.PartialසහHtml.RenderPartial


Html.RenderPartial සමඟ මෙය කරන්නේ කෙසේද?
xatz

1
අපට Html.RenderPartial භාවිතා කළ නොහැක, මන්ද එහි ආපසු පැමිණීමේ වර්ගය අවලංගුයි
නාමරතා ජේන්

9

අර්ධ හෝ විදැහුම් පාර්ශවීය: ක්‍රියාකාරී ක්‍රමයක් නිර්මාණය කිරීම අවශ්‍ය නොවේ. වත්මන් පිටුවේ ආකෘතියේ අර්ධ දෘෂ්ටියෙහි දත්ත ප්‍රදර්ශනය කිරීමට දැනටමත් භාවිතා කරන විට භාවිතා කරන්න.

ක්‍රියාව හෝ විදැහුම්කරණය: ළමා ක්‍රියාකාරී ක්‍රමය අවශ්‍ය වේ. දර්ශනයේ දර්ශනය වීමට දත්ත ස්වාධීන ආකෘතියක් ඇති විට භාවිතා කරන්න.


8

වෙනස්කම්:

  1. නැවත වර්ගය RenderPartialකියන්නේ voidස්ථානය, Partialප්රතිලාභMvcHtmlString

  2. රේසර් දර්ශනවල ආයාචනා කිරීම Partial()සහ RenderPartial()ක්‍රම සඳහා සින්ටැක්ස්

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

  3. වෙබ් ආකෘති දර්ශනවල ආයාචනා කිරීම Partial()සහ RenderPartial()ක්‍රම සඳහා සින්ටැක්ස්

[%: Html.Partial ("PartialViewName")%]
[% Html.RenderPartial ("PartialViewName"); %]

පහත සඳහන් අදාළ 2 පොදු සම්මුඛ පරීක්ෂණ ප්රශ්න වේ Partial()හා RenderPartial() විට ඔබ භාවිතා කරන Partial()වැඩි RenderPartial()සහ අනෙක් අතට?

ප්‍රධාන වෙනස වන්නේ RenderPartial()ප්‍රතිලාභ අවලංගු වන අතර ප්‍රතිදානය කෙලින්ම ප්‍රතිදාන ප්‍රවාහයට ලිවීමයි, එහිදී Partial()ක්‍රමය නැවත පැමිණෙන MvcHtmlStringවිට විචල්‍යයකට පැවරිය හැකි අතර අවශ්‍ය නම් එය හැසිරවිය හැකිය. එබැවින්, එය හැසිරවීම සඳහා විචල්‍යයකට ප්‍රතිදානය පැවරීමේ අවශ්‍යතාවයක් ඇති විට, අර්ධ () භාවිතා කරන්න, නැතිනම් RenderPartial () භාවිතා කරන්න.

කාර්ය සාධනය සඳහා වඩා හොඳ කුමක්ද?

කාර්ය සාධන දෘෂ්ටි කෝණයකින්, ප්‍රතිදාන ප්‍රවාහයට කෙලින්ම විදැහුම් කිරීම වඩා හොඳය. RenderPartial()හරියටම එකම දේ කරන අතර කාර්ය සාධනය සඳහා වඩා හොඳය Partial().


5

Html.Partial: ප්‍රතිලාභ MvcHtmlStringසහ මන්දගාමී

Html.RenderPartial: ප්‍රතිදාන ප්‍රවාහය සහ ප්‍රතිලාභ මත කෙලින්ම විදැහුම් කිරීම / ලිවීම voidසහ එය සාපේක්ෂව ඉතා වේගවත් වේHtml.Partial


3

"අර්ධ" සඳහා මම සෑම විටම එය පහත පරිදි භාවිතා කරමි:

ඔබට පාලකය හරහා යා යුතු පිටුවක ඇතුළත් කිරීමට අවශ්‍ය යමක් තිබේ නම් (ඔබ අජැක්ස් ඇමතුමකින් මෙන්) ඉන්පසු "Html.RenderPartial" භාවිතා කරන්න.

ඔබට 'ස්ථිතික' ඇතුළත් කර ඇත්නම් එය පාලකයකුට සම්බන්ධ නොවන අතර උදාහරණයක් ලෙස 'හවුල්' ෆෝල්ඩරයේ තිබේ නම්, "HTML.partial" භාවිතා කරන්න.


2

@Html.PartialHTML- කේතනය කරන ලද නූලෙන් දර්ශනය ලබා දෙන අතර එකම දර්ශන TextWriterවස්තුව භාවිතා කරන්න . @Html.RenderPartialමෙම ක්‍රමය නැවත පැමිණේ void. @Html.RenderPartialවඩා වේගවත්@Html.Partial

සඳහා වන වාක්‍ය ඛණ්ඩය PartialView:

 [HttpGet] 
 public ActionResult AnyActionMethod
 {
     return PartialView();
 }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.