У меня есть веб-приложение MVC5 со списком предметов и кнопкой доставки для каждого из них.
@foreach (var i in Model.Inventario)
{
@using (Html.BeginForm("AggiungiAlloScarico", "Scarico"))
{
string Disabilitato = "";
string Classe = "";
// some method to define the buttons' styles
<div class="pull-right">
@Html.Hidden("Modello", i.Item.Modello)
@Html.Hidden("returnUrl", Request.Url.PathAndQuery)
<input type="submit" class="@(String.Format("{0}", Classe))" value="Consegna" @Disabilitato />
</div>
}
}
При нажатии любой из этих кнопок должен быть запущен метод действия AggiungiAlloScarico
в контроллере Scarico
. Этот метод просто добавляет выбранный элемент к объекту в сеансе, а затем перенаправляет пользователя в представление Index
в том же контроллере, что-то вроде страницы «корзины», где они могут позже выбрать подтверждение или возврат к исходной странице.
[HttpPost]
public RedirectToRouteResult AggiungiAlloScarico(string Modello, string returnUrl)
{
InventoryItem item = itemRepository.Inventario.FirstOrDefault(i => i.Item.Modello == Modello).Item;
if (item != null)
{
GetScarico().AddItem(item, 1);
}
return RedirectToAction("Index", new { returnUrl });
}
Проблема в том, что этот метод действия вообще не запускается. Я подумал, что может быть что-то не так с маршрутизацией, потому что каждый раз, когда я нажимаю кнопку «Consegna», я перенаправляюсь на страницу localhost:port/Scarico/AggiungiAlloScarico
: эта конструкция URL соответствует карте маршрутизации по умолчанию (последний метод в классе RoutConfig) , но соответствующее действие не вызывается. Более того, я ставлю точку останова на методе, но он никогда не останавливается на достигнутом, поэтому я полагаю, что здесь кроется проблема, но я действительно не вижу ее.
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
null,
"",
new { controller = "magazzino", action = "inventario", manufacturer = (string)null, page = 1 }
);
routes.MapRoute(
null,
"Page{page}",
new { controller = "magazzino", action = "inventario", manufacturer = (string)null },
new { page = @"\d+" }
);
routes.MapRoute(
null,
"{manufacturer}",
new { controller = "magazzino", action = "inventario", page = 1 }
);
routes.MapRoute(
null,
"{modello}",
new { controller = "magazzino", action = "inventario", manufacturer = (string)null, page = 1 }
);
routes.MapRoute(
null,
"{manufacturer}/Page{page}",
new { controller = "magazzino", action = "inventario" },
new { page = @"\d+" }
);
routes.MapRoute(
null,
"{manufacturer}/{modello}",
new { controller = "magazzino", action = "inventario", page = 1 }
);
routes.MapRoute(null, "{controller}/{action}");
}
Все остальные маршруты были созданы для работы с системой фильтрации и навигации, которая работает хорошо.
EDIT:
Я закомментировал все маршруты, кроме стандартных, и это работает. Что не так с моими настроенными маршрутами?
Любая помощь приветствуется.
Спасибо,
Давида.