ASP.NET MVC හි, අතර ඇති වෙනස කුමක්ද:
Html.Partial
සහHtml.RenderPartial
Html.Action
සහHtml.RenderAction
ASP.NET MVC හි, අතර ඇති වෙනස කුමක්ද:
Html.Partial
සහ Html.RenderPartial
Html.Action
සහ Html.RenderAction
Answers:
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
.
Html.Partial()
රේසර් සමඟ වඩාත් චතුර ලෙස වාක්ය ඛණ්ඩයක් ඇති කිරීම සඳහා නිර්මාණය කරන ලදි. @ ව්ලැඩ් පැවසූ පරිදි Html.RenderPartial()
වඩාත් කාර්යක්ෂම වේ.
මව් පිටුවට පිටපත් කළ 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);
}
Partial
යම් හෙයකින් බවට පරිවර්තනය කර තිබෙන්නේ අදහස් නොවේ එය අසම්මිතික ඉටු කරනවා - තරමක් විරුද්ධ - මම ඔයාට කියා හැකි ආකාරය දැකීමට නොහැකි RenderPartial
", වඩාත් පුළුල්ව සම්පත්" ඇත.
මෙන්න මම සොයාගත් දේ:
ඔබට දර්ශනයට යැවීමට ආකෘතියක් නොමැති විට සහ විචල්යයක ගබඩා කිරීමට අවශ්ය නොවන නැවත ගෙන ඒමට html විශාල ප්රමාණයක් ඇති විට RenderAction භාවිතා කරන්න .
දර්ශනයට යැවීමට ඔබට ආකෘතියක් නොමැති විට සහ විචල්යයක ගබඩා කළ යුතු නැවත ගෙන ඒම සඳහා පෙළ ටිකක් ඇති විට ක්රියාව භාවිතා කරන්න .
ඔබට දර්ශනයට යැවීමට ආකෘතියක් ඇති විට RenderPartial භාවිතා කරන්න , විචල්යයක ගබඩා කිරීමට අවශ්ය නොවන html විශාල ප්රමාණයක් ඇත.
දර්ශනයට යැවීමට ඔබට ආකෘතියක් ඇති විට අර්ධ වශයෙන් භාවිතා කරන්න , එවිට විචල්යයක ගබඩා කළ යුතු පෙළ ටිකක් තිබේ.
RenderAction සහ RenderPartial වේගවත් වේ.
@Html.Partial
හා @Html.RenderPartial
භාවිතා ඔබගේ අර්ධ දැක්ම ආදර්ශ මව් ආකෘතිය ලිපි වන විට, අප මෙම කැඳවීමට කිසියම් ක්රියාමාර්ගයක් ක්රමය නිර්මාණය කිරීමට අවශ්ය නැත.
@Html.Action
හා @Html.RenderAction
විට ඔබේ අර්ධ දැක්ම ආකෘතිය භාවිතා ස්වාධීන ඔබ පිටුවේ ඕනෑම විජට් වර්ගය අන්තර්ගත පණිවුඩය ප්රදර්ශනය කිරීමට අවශ්ය විට මූලික වශයෙන් එය භාවිතා කරනු ඇත, මව් ආදර්ශ සිට ඇත. ඔබ ක්රියාකාරී ක්රමයක් නිර්මාණය කළ යුතු අතර එය දෘෂ්ටි කෝණයෙන් ක්රමය ඇමතීමේදී අර්ධ දර්ශන ප්රති result ලයක් ලබා දෙයි.
ප්රශ්නය ගැන වැඩි විස්තර:
"අර්ධ දෘෂ්ටියේ නමක් සහිතව Html.RenderPartial () කැඳවූ විට, ASP.NET MVC, ඇමතුම් දර්ශන අච්චුව භාවිතා කරන එකම ආදර්ශ සහ ViewData ශබ්ද කෝෂ වස්තූන් අර්ධ දර්ශනයට ලබා දෙනු ඇත."
වෘත්තීය ASP.NET MVC 1.0 වෙතින් “NerdDinner”
නැවත වර්ගය 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
අර්ධ හෝ විදැහුම් පාර්ශවීය: ක්රියාකාරී ක්රමයක් නිර්මාණය කිරීම අවශ්ය නොවේ. වත්මන් පිටුවේ ආකෘතියේ අර්ධ දෘෂ්ටියෙහි දත්ත ප්රදර්ශනය කිරීමට දැනටමත් භාවිතා කරන විට භාවිතා කරන්න.
ක්රියාව හෝ විදැහුම්කරණය: ළමා ක්රියාකාරී ක්රමය අවශ්ය වේ. දර්ශනයේ දර්ශනය වීමට දත්ත ස්වාධීන ආකෘතියක් ඇති විට භාවිතා කරන්න.
වෙනස්කම්:
නැවත වර්ගය RenderPartial
කියන්නේ void
ස්ථානය, Partial
ප්රතිලාභMvcHtmlString
රේසර් දර්ශනවල ආයාචනා කිරීම Partial()
සහ RenderPartial()
ක්රම සඳහා සින්ටැක්ස්
@ Html.Partial ("PartialViewName")
@ {Html.RenderPartial ("PartialViewName"); }
වෙබ් ආකෘති දර්ශනවල ආයාචනා කිරීම Partial()
සහ RenderPartial()
ක්රම සඳහා සින්ටැක්ස්
[%: Html.Partial ("PartialViewName")%]
[% Html.RenderPartial ("PartialViewName"); %]
පහත සඳහන් අදාළ 2 පොදු සම්මුඛ පරීක්ෂණ ප්රශ්න වේ Partial()
හා RenderPartial()
විට ඔබ භාවිතා කරන Partial()
වැඩි RenderPartial()
සහ අනෙක් අතට?
ප්රධාන වෙනස වන්නේ RenderPartial()
ප්රතිලාභ අවලංගු වන අතර ප්රතිදානය කෙලින්ම ප්රතිදාන ප්රවාහයට ලිවීමයි, එහිදී Partial()
ක්රමය නැවත පැමිණෙන MvcHtmlString
විට විචල්යයකට පැවරිය හැකි අතර අවශ්ය නම් එය හැසිරවිය හැකිය. එබැවින්, එය හැසිරවීම සඳහා විචල්යයකට ප්රතිදානය පැවරීමේ අවශ්යතාවයක් ඇති විට, අර්ධ () භාවිතා කරන්න, නැතිනම් RenderPartial () භාවිතා කරන්න.
කාර්ය සාධනය සඳහා වඩා හොඳ කුමක්ද?
කාර්ය සාධන දෘෂ්ටි කෝණයකින්, ප්රතිදාන ප්රවාහයට කෙලින්ම විදැහුම් කිරීම වඩා හොඳය. RenderPartial()
හරියටම එකම දේ කරන අතර කාර්ය සාධනය සඳහා වඩා හොඳය Partial()
.
"අර්ධ" සඳහා මම සෑම විටම එය පහත පරිදි භාවිතා කරමි:
ඔබට පාලකය හරහා යා යුතු පිටුවක ඇතුළත් කිරීමට අවශ්ය යමක් තිබේ නම් (ඔබ අජැක්ස් ඇමතුමකින් මෙන්) ඉන්පසු "Html.RenderPartial" භාවිතා කරන්න.
ඔබට 'ස්ථිතික' ඇතුළත් කර ඇත්නම් එය පාලකයකුට සම්බන්ධ නොවන අතර උදාහරණයක් ලෙස 'හවුල්' ෆෝල්ඩරයේ තිබේ නම්, "HTML.partial" භාවිතා කරන්න.
@Html.Partial
HTML- කේතනය කරන ලද නූලෙන් දර්ශනය ලබා දෙන අතර එකම දර්ශන TextWriter
වස්තුව භාවිතා කරන්න .
@Html.RenderPartial
මෙම ක්රමය නැවත පැමිණේ void
.
@Html.RenderPartial
වඩා වේගවත්@Html.Partial
සඳහා වන වාක්ය ඛණ්ඩය PartialView
:
[HttpGet]
public ActionResult AnyActionMethod
{
return PartialView();
}