Вопрос фон:ASP.NET MVC ActionLink не выбирая правильный контроллер
Я пытаюсь передать переменную - в этом случае в Int «PRODUCTID» переменная»в URL для контроллера и действия метод, указанный в методе ActionLink.
Вопрос:
Мои маршруты устанавливаются следующим образом:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Login", action = "Login", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "ProductDetailHandler",
url: "{controller}/{action}/{productId}",
defaults: new { controller = "Product", action = "ProductDetail", productId = UrlParameter.Optional }
);
Мой 'ActionLink' на мой взгляд 'Products.cshtml' - который возвращается контроллером под названием ' HomePageController 'устанавливается следующим образом:
@Html.ActionLink("Product", "ProductDetail", new { productId = (ViewBag.data as List<LoginTest.Models.HomePageItem>).First().Id })
Контроллер, который получает пропуск Эда «ProductID» наряду с методом действия устанавливается следующим образом:
public class ProductController : Controller
{
public ActionResult ProductDetail(int productId)
{
//logic
return View();
}
}
Это вопрос, если смотреть на URL показано, будет перенаправлять на контроллер для домашней страницы:
Если кто-то может сказать мне, почему мой ActionLink является не собирается контроллер Продукт, что было бы здорово.
EDIT:
Это мнение для домашней страницы, что я нажимаю кнопку, чтобы перенаправить меня к 'продукт/ProductDetail/PRODUCTID'
Мой маршрут теперь просто используется «пример по умолчанию»:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Login", action = "Login", id = UrlParameter.Optional }
);
Действие Ссылка теперь:
@Html.ActionLink("Product", "ProductDetail", "Product", new { id = (ViewBag.data as List<LoginTest.Models.HomePageItem>).First().Id })
«ProductDetail Продукт /» контроллер и действие метод теперь выглядит следующим образом:
public class ProductController : Controller
{
public ActionResult ProductDetail(int id)
{
string hold;
return View();
}
}
Это еще дает мне неверный URL, как показано на рисунке, Заметьте, что «productId» теперь отображается как «длина»?
У вас есть другие маршруты в файле маршрута? По умолчанию маршрут контроллера/action/id должен работать. Вам не нужны настраиваемые маршруты, которые в основном одинаковы. Также в вашем примере productid также не должен отображаться в строке запроса. – Kirby
@Kirby Я добавил все содержимое своего маршрута RouteConfig.cs – user1352057
Переместите ваш маршрут «ProductDetailHandler» до «Default» и измените URL-адрес на «url:« Product/ProductDetail/{productId} »или просто удалите маршрут и измените метод на 'ProductDetail (int id) –