c# - Razor 中的嵌套 Html.Action 调用

标签 c# asp.net-mvc asp.net-mvc-3 razor

编辑:显然这是我网站的一个大大简化的版本,如果我制作一个测试应用程序,使用这种模式它工作正常。在我们真正的应用程序中,我们使用的是 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/

相关文章:

c# - 使用 Path.Combine() 时源和目标必须不同

c# - 在派生类中隐藏基类的公共(public)属性

asp.net-mvc - 多次渲染局部 View 时的模型绑定(bind)(用于编辑的局部 View )

asp.net-mvc - ASP.Net MVC : Check if URL is Authorized

asp.net-mvc - MVC ModelMetaData 属性和格式化日期的问题

c# - 设计模式建议 - 将 ViewModel 与域模型分离

c# - 获取代表用户权限的列表 - EWS Manage API

asp.net-mvc - 路由 MVC 4 应用程序 url - css 和 js 不起作用

asp.net-mvc-3 - 在mvc3中将所需的属性消息显示为html文本

.net - 我可以仅针对这种特定情况在 Ninject 中指定范围吗?