为什么ASP.NET MVC路径出现变量?

gfr*_*zle 2 model-view-controller asp.net-mvc

在我的MVC应用程序中,为什么呢

Return RedirectToAction("Edit", "Forms", New With {.member = "123"})
Run Code Online (Sandbox Code Playgroud)

返回

http://localhost:13/Forms/Edit?member=123
Run Code Online (Sandbox Code Playgroud)

绝对的

http://localhost:13/Forms/Edit/123
Run Code Online (Sandbox Code Playgroud)

为什么呢

<%=Html.ActionLink("MyLink", "Edit", "Forms", New With {.member = "123"}, Nothing)%>
Run Code Online (Sandbox Code Playgroud)

做同样的事?

edu*_*911 6

正如tvanfosson所说,"id"是默认路由引擎设置要查找的内容.作为第三个参数的任何其他东西,它将被作为一个查询字符串.

为什么?因为Global.asax中的这个方法:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = "" }
);
Run Code Online (Sandbox Code Playgroud)

您可以通过添加其他routes.MapRoute()行来更改此设置,如下所示:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = "" }
);

routes.MapRoute(
    "Default2",
    "{controller}/{action}/{member}",
    new { controller = "Home", action = "Index", member = "" }
);
Run Code Online (Sandbox Code Playgroud)


tva*_*son 5

标准路由设置为使用id作为第三个参数.将"member"更改为"id",您将获得您期望的路线.

Return RedirectToAction("Edit", "Forms", New With { .id = "123"})
Run Code Online (Sandbox Code Playgroud)