Как получить контроллер контроллера MVC контекста? - PullRequest
0 голосов
/ 28 июня 2019

Использование MVC 5. Я пытаюсь получить любое из нескольких представлений, которые я вставлю через ajax в Div.Я использую класс, который я нашел в SO, который ограничивает меня контроллером, из которого я вызываю метод.

Мне нужно предоставить любой метод, который я хочу, этому методу.Есть ли способ, которым это возможно?

1004 * Это то, что у меня есть.
public static string RenderView(this Controller controller, string viewName, object model)
{
        return RenderView(controller, viewName, new ViewDataDictionary(model));
}


public static string RenderView<TModel>(this Controller controller, string viewName, TModel model, bool partial = false)
{
    var controllerContext = controller.ControllerContext;
    controllerContext.Controller.ViewData.Model = model;
    //viewName = "List";
    //var viewResult = partial ? ViewEngines.Engines.FindPartialView(controllerContext, viewName) : ViewEngines.Engines.FindView(controllerContext, viewName, null);
    StringWriter stringWriter;

    using (stringWriter = new StringWriter())
    {
        var viewResult = ViewEngines.Engines.FindView(controllerContext, viewName, null);
        var viewContext = new ViewContext(controllerContext, viewResult.View, controllerContext.Controller.ViewData, controllerContext.Controller.TempData, stringWriter);

        viewResult.View.Render(viewContext, stringWriter);
        viewResult.ViewEngine.ReleaseView(controllerContext, viewResult.View);

        return stringWriter.GetStringBuilder().ToString();
    }
}

Из моего контроллера UserAndPersonController я вызываю этот метод, который затем пытается получить все необходимое представлениечтобы вернуться к вызову ajax и поместить его в определенный Div.

public string GetView(string viewName, string request)
{
    Object obj = new Object(); 
    // Get the various Designations a Person can have
    if (request.Contains("User"))
    {
        obj = new { PersonUserModel = "Catalyst.Mvc.Models.PersonUserModel" };
    }
    else if (request.Contains("Driver"))
    {
        obj = new { DriverViewModel = "Models.DriverViewModel" };
    }
    else if (request.Contains("Debtor"))
    {
        obj = new { DebtorViewModel = "Models.DebtorViewModel" };
    }

    // ?? How do I get any Controller context , each must match the respective models 
    string viewHTML = this.RenderView( "List", obj);
    return viewHTML;
}

Я также получаю сообщение об ошибке из viewResult.view.render (viewContext, stringWriter);строка, независимо от того, какую модель я пытаюсь передать.

System.InvalidOperationException: 'Элемент модели, переданный в словарь, имеет тип' <> f__AnonymousType14`1 [System.String] ', но этоДля словаря требуется элемент модели типа 'Catalyst.Mvc.Models.PersonUserModel'. '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...