【问题标题】:Parameter ok in RouteData but passed as null in controllerRouteData 中的参数 ok,但在控制器中作为 null 传递
【发布时间】:2010-02-04 19:47:05
【问题描述】:

我现在已经接触 MVC 几个星期了,而且每天都会出现一些新的东西,这让我觉得很奇怪。所以,我试图找到我面临的问题的答案。尽管如此,对于当前的问题,我似乎在 stackoverflow 上或谷歌的任何地方都找不到下降的答案......

我在使用 HTML.RenderAction 方法将参数传递给我的控制器时遇到问题。由于某种原因,参数在 RouteData 中正确结束,但“函数参数”为空。我认为这与我的路线图有关,所以我想在这里发布它们以获取更多信息。

我的路线图(除其他外,但我知道我当前的操作正在使用此根):

routes.MapRoute("Default","{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = "" },
            null,
            new[] { "Web.Controllers" }
        );

我的控制器操作:

public ActionResult GeneralManagementDetail(int? id)
{
        //dostuff
}

RenderAction 调用:

<% Html.RenderAction("GeneralManagementDetail", "Person", new { id = 4 }); %>

当然,“4”当前是一个硬编码值,它将成为我在那里的包含 foreach 循环中的对象的 id。

现在,这导致控制器中的“int id”为 NULL,但是当“QuickWatching”RouteData 时,它肯定有一个键值对“id,4”...

【问题讨论】:

  • 这对我们有用,但我们不会重复使用 URI 中的令牌。如果您在操作和对RenderAction 的调用中将id 更改为detailId 是否有效?
  • 不,最初我认为这也是问题所在,所以我使用了一个与我所有映射中使用的任何名称都不相近的参数名称,它给出了相同的结果。
  • 嗯...嗯,它对我们有用,但我们使用的是 MVC 2。你可能想在一个无所事事的项目中单独尝试这个,看看它是否在 MVC 1 和2. 由于这是在 Futures 中,因此在 MVC 1 中没有经过全面测试。

标签: asp.net-mvc asp.net-mvc-routing renderaction


【解决方案1】:

好的,澄清一下,问题显然是控制器被缓存在提供给我们的框架中(不同的开发团队使用框架)。因此,当我们深入研究框架并确保容器不再被缓存时,参数的传递就像一个魅力。 非常感谢您的回答,但问题似乎出在我们自己的公司内部!

【讨论】:

    【解决方案2】:

    也许“id = (int?)null”可以解决问题?我的意思是,如果类型搞砸了怎么办。

    【讨论】:

    • 也没有做到这一点...不过,我想我会以其他方式解决它,例如使用“RenderPartial”选项渲染局部视图,然后通过在主模型的子模型上。这将起作用,并且仍然是该网站的可行解决方案。 (实际上它的结构可能更正确)。
    猜你喜欢
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多