ViewBag和路由问题(MVC 3 - RC2)

时间:2010-12-18 17:02:19

标签: asp.net-mvc-3

我遇到了MVC-3为我生成传出路由的问题。

这是我在两种情况下所使用的网页的地址:http://localhost:1283/Conflict/Create/1200/300

以下是地图路线:

routes.MapRoute(
    null, // Route name
    "{controller}/{action}/{custId}/{projId}", // URL with parameters
    null, // Parameter defaults
    new { custId = @"\d+", projId = @"\d+" }
);

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

情景1:

来自控制器:

public ActionResult Create(int custId, int projId)
{
    return View();
}

从视图:

@Html.ActionLink("Back to List", "Index", "Conflict", new { custId = ViewBag.custId, projId = ViewBag.projId }, null)

创建的结果链接。

http://localhost:1283/Conflict?custId=1200&projId=300

如果我将控制器代码更改为如下所示:

public ActionResult Create(int custId, int projId)
{
        ViewBag.custId = custId;
        ViewBag.projId = projId;

        return View();
}

我没有对视图进行任何更改,只将这两行添加到控制器并创建了以下链接:

http://localhost:1283/Conflict/Index/1200/300

我在这里缺少什么?这是一致的行为,我能够在我的应用程序的其他方面重现这一点。 “解决方案”很明显,但我的问题是为什么?

1 个答案:

答案 0 :(得分:2)

正在发生的事情是您的链接中的“?custId = 1200& projId = 300”部分来自您用于获取您所在页面的链接。所以Html.ActionLink调用是这样做的:

  1. 生成/冲突/索引路径
  2. 在ViewBag中查找custId和projId并找到查询字符串
  3. 只需附加您的查询字符串
  4. 在第二种情况下,您实际上是在提供值,因此链接正常生成。希望有所帮助。