Разница между Html.Action и Html.RenderAction
Я пытался выяснить разницу между RenderAction и Action. Я не знаю, беспокоюсь ли я о различиях на данный момент, почему я не могу заставить RenderAction работать. Из того, что я могу сказать, я передаю правильные параметры. Перегрузка, которую я использую, кажется одинаковой для обоих:
@Html.RenderAction(Action, Controller, Route)
@Html.Action("Breadcrumb", "Navigation", new {SeoUrl = Model.CarlineBucket.SEOURLName})
@Html.RenderAction("Breadcrumb", "Navigation", new {SeoUrl = Model.CarlineBucket.SEOURLName})
Я получаю ошибку компиляции, когда я пытаюсь использовать RenderAction:
CS1502: лучший перегруженный метод соответствовать 'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)' имеет некоторые недопустимые аргументы.
Любые советы или подсказки? Должен ли я даже не беспокоиться о RenderAction?
Ответы
Ответ 1
Try:
@{Html.RenderAction("Breadcrumb", "Navigation", new {SeoUrl = Model.CarlineBucket.SEOURLName})}
@Html.RenderAction()
генерирует вызов записи для вывода чего-либо на странице, и в вашем случае вы этого не делаете, потому что RenderAction
выводит результат непосредственно в ответ. если вы будете использовать @{Html.RenderAction()}
, он должен работать.
Ответ 2
Из Phil Haack:
Разница между двумя заключается в том, что Html.RenderAction
отобразит результат непосредственно на ответ (который более эффективна, если действие возвращает большое количество HTML) тогда как Html.Action
возвращает строку с результатом.
Ответ 3
Возвращаемый тип 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 в представлении.