更改网址asp.net mvc 5

时间:2017-04-29 15:29:16

标签: asp.net-mvc asp.net-mvc-5 maproute

routes.MapRoute(
            name: "MyRoute",
            url: "{Product}/{name}-{id}",
            defaults: new { controller = "Home", action = "Product", name = UrlParameter.Optional , id = UrlParameter.Optional }
        );

我的路线图,我希望我的产品操作网址类似于= http://localhost:13804/Wares/Product/name-id

但现在就像= http://localhost:13804/Wares/Product/4?name=name

2 个答案:

答案 0 :(得分:1)

定义路由模式时,令牌{}用于指示操作方法的参数。由于您的操作方法中没有名为Product的参数,因此路由模板中没有{Product}

由于您想要yourSiteName/Ware/Product/name-id所需的网址nameid是动态参数值,因此您应该将静态部分(/Ware/Product/)添加到路由模板。

这应该有用。

routes.MapRoute(
    name: "MyRoute",
    url: "Ware/Product/{name}-{id}",
    defaults: new { controller = "Ware", action = "Product", 
                  name = UrlParameter.Optional, id = UrlParameter.Optional }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

假设您的产品操作方法接受这两个参数

public class WareController : Controller
{
    public ActionResult Product(string name, int id)
    {
        return Content("received name : " + name +",id:"+ id);
    }
}

您现在可以使用Html.ActionLink助手

生成具有上述模式的网址
@Html.ActionLink("test", "Product", "Ware", new { id = 55, name = "some" }, null)

答案 1 :(得分:1)

我知道它很晚但你可以在MVC5中使用内置的属性路由。希望它可以帮助别人。您不需要来使用

routes.MapRoute(
            name: "MyRoute",
            url: "{Product}/{name}-{id}",
            defaults: new { controller = "Home", action = "Product", name = UrlParameter.Optional , id = UrlParameter.Optional }
        );

相反,您可以使用以下方法 首先在 RouteConfig.cs

中启用属性路由
public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapMvcAttributeRoutes();
}

然后在WaresController

[Route("Wares/Product/{name}/{id}")]
public ActionResult Product(string name,int id)
{
   return View();
}

然后在View.cshtml文件中导航这样的代码

<a href="@Url.Action("Product","Wares",new { name="productname",id="5"})">Navigate</a>

按照上述步骤操作后,您的网址将如下所示 的 http://localhost:13804/Wares/Product/productname/5