Подтвердить что ты не робот

Разница между 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?

4b9b3361

Ответ 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 в представлении.