RouteLink发布相同的操作

时间:2010-02-04 15:48:39

标签: asp.net-mvc

我认为编辑和创建“用户组”。我有一个“usergroup-detailsview”(Admin / Usergroup / 43),其中有2个链接:

Html.RouteLink("Edit", "UsergroupEdit", 
    new { usergroupID = Model.Usergroup.UsergroupID })

Html.RouteLink("Create", "UsergroupCreate")

在我的global.asax中,我得到了:

routes.MapRoute("UsergroupEdit", "Admin/Usergroup/Edit/{usergroupID}",
    new { controller = "UsergroupsAdmin", action = "Edit" } );

routes.MapRoute("UsergroupCreate", "Admin/Usergroup/Edit", 
    new { controller = "UsergroupsAdmin", action = "Edit" } );

传递int的第一个渲染:

管理员/用户组/编辑/ 87

但第二个呈现如下:

管理员?长度= 24

我该如何解决这条路线?

/ M

4 个答案:

答案 0 :(得分:3)

保持理智;)并保持清醒使用两条路线:

routes.MapRoute(
    "UsergroupEdit",
    "Admin/Usergroup/Edit/{usergroupID}",
    new
    {
        controller = "UsergroupsAdmin", 
        action = "Edit"
    });

routes.MapRoute(
    "UsergroupCreate",
    "Admin/Usergroup/Create",
    new
    {
        controller = "UsergroupsAdmin",
        action = "Create"
    });

同样从代码我看到你有一个控制器名称UsergroupsAdmin ..如果你有一个Usergroups控制器的地方,你最好摆脱UsergroupsAdmin,只需用[授权动作过滤器]装饰用户组控制器中的“管理”操作。

对于授权,您可以实施自己的角色提供程序,以便在那里检查您的要求。它将保持非常干净和可维护。

如果您决定保留编辑路线,请确保只有这样的路线:

routes.MapRoute(
    "UsergroupEdit",
    "Admin/Usergroup/Edit/{usergroupID}",
    new
    {  
        controller = "UsergroupsAdmin",  
        action = Edit",
        usergroupID = 0
    });

并检入usergroupID = 0的控制器操作,渲染创建视图。

答案 1 :(得分:1)

你所拥有的应该工作得很好。也许你的某个地方有错字?

我只是通过将这两个调用放入HomeController中的Index.aspx视图中来尝试这个,我得到了以下输出:

<a href="/Admin/Usergroup/Edit/123">Edit</a> 
<a href="/Admin/Usergroup/Edit">Create</a>

这是我的RegisterRoutes方法。

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");


    routes.MapRoute("UsergroupEdit", "Admin/Usergroup/Edit/{usergroupID}",
        new { controller = "UsergroupsAdmin", action = "Edit" });

    routes.MapRoute("UsergroupCreate", "Admin/Usergroup/Edit",
        new { controller = "UsergroupsAdmin", action = "Edit" });

    routes.MapRoute(
        "Default",                                              // Route name
        "{controller}/{action}/{id}",                           // URL with parameters
        new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
    );

}

最有可能的是,您遇到了在这些路线之前定义的另一条路线的问题。

答案 2 :(得分:0)

你的控制器方法“编辑”是什么样的(方法签名)?

您使用的是int吗? datatype(一个可以为null的int)?

我通常得到整个?长度= 24的东西,当我试图映射到一个动作,并以某种方式搞砸了参数。

您还应该考虑尝试@Hacked建议重新排序全局代码中的路由。我不知道是谁在投票给那个人,但他对ASP.NET MVC了解很多。

答案 3 :(得分:0)

更改了订单,虽然没有完全解决,只是让它正常工作