У меня ошибка, которая заставляла меня за стены за последние пару дней. У меня есть код, который принимает HttpContext и ViewResult и отображает представление в строку. Этот код работает очень хорошо, пока я не представил представление, которое включает вызов @ Html.RenderAction. Когда к представлению добавляется вызов RenderAction, появляется сообщение об ошибке, указывающее, что для контроллера, связанного с действием, нужен конструктор без параметров. Однако добавление такого конструктора не улучшает ситуацию. Код, который выполняет рендер следующим образом:Оказывает частичный вид ASP.Net MVC на строку, когда частичный вид содержит действие рендера.
public static string Render(HttpContextBase httpContext, ViewResultBase partialViewResult)
{
var routeData = new RouteData();
routeData.Values.Add("controller", "mock");
var context = new ControllerContext(httpContext, routeData, new EmptyController());
var view = partialViewResult.View;
if (view == null)
{
result = partialViewResult.ViewEngineCollection.FindPartialView(context, partialViewResult.ViewName);
view = result.View;
}
using (var sw = new StringWriter())
{
var viewContext = new ViewContext(context, view, partialViewResult.ViewData,
partialViewResult.TempData, sw);
view.Render(viewContext, sw);
if (result != null)
result.ViewEngine.ReleaseView(context, view);
return sw.ToString();
}
}
В представлении я пытаюсь сделать, я попытался:
@{ Html.RenderAction(FormController.Directive(Model.FormModel)); }
и
@Html.Action(FormController.Directive(Model.FormModel))
Оба результата в тех же сообщениях об ошибках ,
An error occurred when trying to create a controller of type 'FormController'. Make sure that the controller has a parameterless public constructor.
Удаление вызова действия в целом устраняет сообщение об ошибке.
Действие в контроллере выглядит следующим образом:
public virtual ActionResult Directive(FormModel model)
{
model.MyProperty = "test";
return View("FormView", model);
}
Любые советы будут оценены.
UPDATE
Я отследил эту проблему, имеющий какой-то галстук к Unity. Код рендеринга работает, когда я добавляю пустой конструктор и удаляю все остальные конструкторы. Другие конструкторы включали ссылки на интерфейсы, которые маршрутизировались через Unity. Мне нужно больше узнать о Единстве. Там могут быть некоторые функции, которые заменяют или уничтожают конструктор по умолчанию моего контроллера.
Спасибо за ваше представление, но это не решило проблему. Ошибка конструктора без параметров сохраняется. – CodeMunkey
Создает ли ваш 'FormController' конструктор, похожий на этот' public FormController() {...} '. Возможно, вы можете добавить класс 'FormController' к вашему вопросу, потому что кажется, что это проблема, а не остальная часть. –
Я попытался использовать контроллер с открытым пустым конструктором или даже без каких-либо конструкторов, и ошибка остается прежней. Помните, что проблема здесь как-то связана с попыткой отобразить представление в строку. Вид и контроллер работают нормально при визуализации с использованием IIS. – CodeMunkey