У вас есть 2 различных вопроса. Прежде всего, это не сработает правильно, чтобы сделать 3 необязательных параметра на маршруте. Только последний (самый правый) параметр может быть дополнительным. Итак, вам нужны два маршрута для того, чтобы все комбинации 0, 1, 2, 3, 4 или 5 сегментов в URL.
// This will match URLs 4 or 5 segments in length such as:
//
// /Home/Index/2/3
// /Home/Index/2/3/4
//
routes.MapRoute(
name: "4-5Segments",
url: "{controller}/{action}/{id}/{id2}/{id3}",
defaults: new { id3 = UrlParameter.Optional }
);
// This will match URLs 0, 1, 2, or 3 segments in length such as:
//
// /
// /Home
// /Home/Index/
// /Home/Index/2
//
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
во-вторых, ваш ActionLink не соответствует заданному, потому что вы указали значение маршрута в id1
, но в ваш маршрут составляет id
. Таким образом, вам необходимо изменить ActionLink
следующим образом:
@Html.ActionLink("my text", "myActionName", "myControllerName", new { id = 3, id2 = 7, id3 = 2}, null)
Это предполагает, что вы правильно настроить контроллер:
public class myControllerNameController : Controller
{
//
// GET: /myActionName/
public ActionResult myActionName(int id = 0, int id2 = 0, int id3 = 0)
{
return View();
}
}
См working demo here.
Для дальнейшего использования, пожалуйста, предоставьте код в виде текста. Очень сложно скопировать и отредактировать изображение, так что вы вряд ли получите ответ.
Я пытался, но все еще такой же результат :( – junior
Для того, чтобы работать, ваше имя контроллера должно быть ровно 'myControllerNameController'. Я поставил его в тестовом проекте, и он прекрасно работает так, как я, указанный здесь. – NightOwl888
Имя моего контроллера, как вы сказали. Имя должно быть таким? 'name:" 4-5Segments "' – junior