Итак, если вы правильно поняли, что хотите выполнить разные действия и другую логику, основанную на значении параметра, переданного методу.
Один из способов, которым вы могли бы это сделать, - использовать систему маршрутизации, но я бы посоветовал вам выбрать это, если возможные значения параметра имеют управляемый размер.
Тогда в ваших RouteConfig.cs файл:
public static void RegisterRoutes(RouteCollection routes)
{
// ... other routes
string[] possibleValueSet1 = new[] { ... };
string[] possibleValueSet2 = new[] { ... };
for (int i = 0; i < possibleValueSet1.Length; ++i)
{
routes.MapRoute(
name: "YourActionWithValueSet1_" + i.ToString(),
url: "ControllerName/FirstAction/" + possibleValueSet1[i],
defaults: new { controller = "ControllerName", action = "FirstAction", foo = possibleValueSet1[i] }
);
}
for (int i = 0; i < possibleValueSet2.Length; ++i)
{
routes.MapRoute(
name: "YourActionWithValueSet2_" + i.ToString(),
url: "ControllerName/SecondAction/" + possibleValueSet2[i],
defaults: new { controller = "ControllerName", action = "SecondAction", foo = possibleValueSet2[i] }
);
}
}
Таким образом, каждое возможное значение обув, которые должны быть обработаны с помощью логики # 1, будет иметь собственный URL, то же самое относится и к значениям который должен обрабатываться логикой № 2.
Я думаю, вы уже можете видеть, что это идет далеко, а в то же время неявное, оно никоим образом не поддерживает или вообще не лучше, чем просто реализовать решение внутри действия, о котором вы указали, которого вы хотели избежать. То, о чем вы просите, звучит как «перегрузка по принципу ценности», который C# не разрешает, приведенный выше код является своего рода грязным обходным решением, позволяющим движку маршрутизации сделать это за вас, хотя это не фактическая перегрузка, это просто сопоставление различных действий на основе жестко заданных значений.
Изменить тип возврата с 'JsonResult' на' ActionResult', из которого наследуются как 'JsonResult', так и' RedirectResult'? Вы не всегда возвращаете JSON из этого метода, так что возвращаемый тип, который вы используете, не подходит. – CodeCaster
Да, я думаю, вы создаете действие для звонка AJAX? Если да, то в чем логика «перенаправления»? – Kamo
использовать 'ActionResult' вместо' JsonResult' .. вы можете в любом случае вернуть JSON в качестве результата с помощью 'return Json (yourData, JsonRequestBehavior.AllowGet)' из вашего текущего действия или 'SecondAction' –