1

在 ASP.NET MVC 4 中,我想知道行为,如何为我生成链接。

想象一个简单的控制器,有 3 个动作,每个动作都有一个整数参数“requestId”,例如:

public class HomeController : Controller
{
    public ActionResult Index(int requestId)
    {
        return View();
    }

    public ActionResult About(int requestId)
    {
        return View();
    }

    public ActionResult Contact(int requestId)
    {
        return View();
    }
}

和这个注册的路线(在默认路线之前):

routes.MapRoute(
    name: "Testroute",
    url: "home/{action}/{requestId}",
    defaults: new { controller = "Home", action = "Index" }
);

我调用我的索引视图使用http://localhost:123/home/index/8

在此视图中,我为其他两个操作呈现链接:

@Html.ActionLink("LinkText1", "About")
@Html.ActionLink("LinkText2", "Contact")

现在我希望 MVC 呈现这个链接,包括“requestId”的当前路由值,如下所示:

http://localhost:123/home/about/8
http://localhost:123/home/contact/8

但我得到了这些链接(没有参数):

http://localhost:123/home/about
http://localhost:123/home/contact

...但如果我指定一个,则不适用于索引操作:

@Html.ActionLink("LinkText3", "Index")

我要避免的是以这种方式显式指定参数:

@Html.ActionLink("LinkText1", "Contact", new { requestId = ViewContext.RouteData.Values["requestId"] })

当我在 action 参数之前移动 requestId 参数时,它会像我期望的那样工作,但我不想移动它:

routes.MapRoute(
    name: "Testroute",
    url: "home/{requestId}/{action}",
    defaults: new { controller = "Home", action = "Index" }
);

有人可以向我解释这种行为吗?如何在不明确指定参数的情况下使其工作?

4

1 回答 1

0

InController:将 int 替换为可为空的 int

对于路由:在路由中将 requestId 设置为可选

routes.MapRoute(
    name: "Testroute",
    url: "home/{action}/{requestId}",
    defaults: new { controller = "Home", action = "Index" ,requestId=RouteParameter.Optional }
);
于 2013-11-13T10:17:54.217 回答