Как передать имя контроллера в действие контроллера другого контроллера?

У меня есть SQL-запрос, в котором я хочу передать имя контроллера в качестве одного из параметров сравнения предложения where. И в приложении много контроллеров. В зависимости от имени контроллера будут разные результаты выполнения запроса. Итак, как я могу передать имя контроллера какому-то третьему контроллеру.

Используя этот @ViewContext.RouteData.Values["controller"], я могу получить имя контроллера, но только в представлении этого контроллера. Итак, как этого можно добиться в другом методе действия контроллера.


person Krish    schedule 17.12.2012    source источник
comment
Если я хорошо понимаю, вы можете просто передать имя контроллера в качестве параметра метода действия.   -  person mipe34    schedule 17.12.2012
comment
Я получаю имя контроллера, скажем, в представлении домашнего контроллера, поэтому из этого представления я хочу передать его методу действия Testcontroller. Не знаете, как этого можно добиться?   -  person Krish    schedule 17.12.2012
comment
И вы намерены перейти туда с каким-то @Html.ActionLink или вы хотите просто отобразить результат действия TestController на той же странице с @Html.RenderAction ?   -  person mipe34    schedule 17.12.2012


Ответы (1)


Существует несколько способов передачи значения методу действия в ASP MVC. Это зависит от типа запроса.

Пример запроса GET

// navigation to action
@Html.ActionLink("link","myAction","otherCon", new {controllerNamePar = ViewContext.RouteData.Values["controller"]}

// render result of action into current view
@{Html.RenderAction("myAction","otherCon", new {controllerNamePar = ViewContext.RouteData.Values["controller"]}}

controllerNamePar будет отправлено в качестве строки запроса в URL-адресе.

Пример запроса POST

@using (Html.BeginForm("MyAction", "OtherCon", FormMethod.Post))
{
    @Html.Hidden("controllerNamePar", ViewContext.RouteData.Values["controller"])
    <input type="submit" value="OK" />
}

controllerNamePar будет отправлено как часть html-формы.

person mipe34    schedule 17.12.2012
comment
Представление для TestController не существует. Этот контроллер просто содержит методы, вызываемые с помощью вызова ajax, и этот метод возвращает некоторые записи из базы данных. - person Krish; 17.12.2012
comment
Не имеет значения. Я только хотел показать вам, что единственный способ передать значения методу действия — через QueryString или через html-форму. И вы не предоставили достаточно информации, как вы пытаетесь выполнить свою задачу, поэтому я описал оба варианта. Не могли бы вы немного расширить свой вопрос (покажите код, который вы пытались выполнить для своего сценария - домашний вид, домашний контроллер, другой контроллер). - person mipe34; 17.12.2012