Asp.net mvc 4 url重写ASP.NET MVC后控制器中的参数为null
我有问题,因为我试图重写我的网址 使用默认路线,一切正常。 我在视图中有一个ActionLink,它向控制器发送一些参数Asp.net mvc 4 url重写ASP.NET MVC后控制器中的参数为null,asp.net-mvc-4,url-rewriting,Asp.net Mvc 4,Url Rewriting,我有问题,因为我试图重写我的网址 使用默认路线,一切正常。 我在视图中有一个ActionLink,它向控制器发送一些参数 @{string selectedCar = ""; if (Request.Cookies["url"] != null) { selectedCar = Request.Cookies["url"] == null ? string.Empty : Request.Cookies["url"].Values["url"].ToString(); } string re
@{string selectedCar = "";
if (Request.Cookies["url"] != null)
{
selectedCar = Request.Cookies["url"] == null ? string.Empty : Request.Cookies["url"].Values["url"].ToString();
}
string regExp = "[^a-zA-Z0-9]";
string productName = Regex.Replace(@c.Name, regExp, "-");
string productCode = @c.Code.Trim();
<p class="text-center text-muted">
<a href="@Url.Action("ProductDetails", "Product" , new { category = productName, selected = selectedCar, code = productCode})" id="link">
Details
</a>
我试着解决,但没有任何运气。问题出在路线上,但因为我没有太多的路线经验,所以我没有弄清楚问题出在哪里。你能给个建议吗?谢谢 你所有的路线基本上都是相同的,你的链接与第一条相匹配。您需要使您的路由特定-例如,第一个路由应该是
url:“产品/子类别/{id}/{selected}/{category}/{engineId}”,
和第二个url:“产品/产品详细信息/{category}/{selected}/{code}”",
etc并且只有最后一个参数可以标记为urlparmeter。可选
,但是因为您似乎想提供所有参数,所以只需删除它们。这个解决方案似乎解决了我的问题,但是现在控制器方法ProductDetails被调用了2次,第一次它获得了正确的参数,第二次是参数名称=Scripts和selected=“jquery-1.8.2.min.js”。加载了详细信息页面,但在后台,由于这些不正确的值,我遇到了一些异常。您知道为什么会发生这种情况吗?我假设您有其他代码进行第二次调用,但您没有向我们展示。
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Categories",
url: "{controller}/{action}/{id}/{selected}/{category}/{engineId}",
defaults: new { controller = "Product", action = "SubCategories"
, selected = UrlParameter.Optional,
category = UrlParameter.Optional,
engineId = UrlParameter.Optional
}
);
routes.MapRoute(
name: "Details",
url: "{controller}/{action}/{category}/{selected}/{code}",
defaults: new
{
controller = "Product",
action = "ProductDetails",
category = UrlParameter.Optional,
selected = UrlParameter.Optional,
code = UrlParameter.Optional
});
routes.MapRoute(
name: "Purchase",
url: "{controller}/{action}/{id}/{name}",
defaults: new { controller = "Purchase", action = "PurchaseProduct", id = UrlParameter.Optional, name = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);