编辑:显然这是我网站的一个大大简化的版本,如果我制作一个测试应用程序,使用这种模式它工作正常。在我们真正的应用程序中,我们使用的是 T4MVC,这都在一个区域内。我猜是这些因素之一导致了我的问题...
EDIT2:所有默认路由都已定义,如果我直接导航到/AreaName/ControllerName/SubChild?val=123 它会呈现。
我有一个 Mvc 的特殊问题,希望有人能提供帮助...
我有一个具有以下操作方法的 Controller
public ActionResult Index()
{
return View(GetModel());
}
public ActionResult Result Child(string blah)
{
return View(GetModel(blah));
}
public ActionResult Result SubChild(int val)
{
return View(GetModel(val));
}
然后我有 3 个 Razor View 。
索引.cshtml
<div>
@Html.Action("Child", new { blah = "raaa"})
</div>
Child.cshtml
<div>
@*ERROR HERE*@
@Html.Action("SubChild", new { val = 123})
</div>
SubChild.cshtml
<h1>@Model.val</h1>
当我导航到/我得到一个异常抛出说 “路由表中没有路由与提供的值匹配。”在调用 SubChild 操作的 Html.Action 上。
这一切都在同一个区域和同一个 Controller 内。如果我更改标记并使用 Html.Partial 调用 subview (并构建模型并将其传递到 View 中),它会呈现良好。当我在已使用 Html.Action 呈现的 View 中调用 Html.Action 时,问题就出现了。
我已经尝试使用 /area/controller/action,在 Html.Action 调用中指定 Controller ,将区域作为参数传递到路由值和所有这些的组合中。
有人知道这可能是什么吗?我假设您可以在使用它呈现的 View 中调用 Html.Action,我想我可能是错的...
最佳答案
嗯,开箱即用的 MVC 3 具有名为 id
的默认路由参数。您的 SubChild
操作有一个名为 val
的参数,所以这可能是问题所在。
要么将Action中的参数重命名为id,要么添加一个新路由
routes.MapRoute(
"SubChild",
"{controller}/SubChild/{val}",
new
{
controller = "ControllerName",
action = "SubChild",
val = UrlParameter.Optional
}
);
关于c# - Razor 中的嵌套 Html.Action 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8822497/