我有一个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}");
}
创建了所有其他路线来处理过滤和导航系统,效果很好。
编辑: 我注释掉了除默认路由以外的所有路由,并且它可行。我的自定义路线有什么问题?
感谢您的帮助。
谢谢, 戴维德。
答案 0 :(得分:0)
添加路由的顺序很重要。路由引擎将采用与提供的URL匹配的第一条路由,并尝试使用该路由中的路由值。尝试用“属性路由”注释操作方法,如果可行,那么大多数情况下应该与路由顺序保持一致。