在其视图中访问子操作参数

时间:2013-09-05 07:00:55

标签: asp.net-mvc-4 razor http-request-parameters child-actions

public class AController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

和索引视图就像

...
@Html.Action("Index", "BController", new { HasEditPermission = true })
...

BControler就像

public class BController : Controller
{
    public ActionResult Index()
    {
        return PartialView();
    }
}

这个索引部分视图就像

...
@if (!string.IsNullOrEmpty(Request.Params["HasEditPermission"]) && bool.Parse(Request.Params["HasEditPermission"]))
{
 // some html rendering
}
...

当我在局部视图中执行Request.Params["HasEditPermission"]时,我得到null ..但如果我将HasEditPermission作为Index BController Request.Params行动的参数包含在内,那么我得到价值..

我认为,我不是从AController获取的,因为实际请求是针对不包含此参数的Index {{1}}操作。

但是我想知道如何将值绑定到BController的Index动作的HasEditPermission参数(假设我有它)?

请有人告诉我如何直接在视图中访问它? (我知道在Index中使用ViewBag是一个选项)

1 个答案:

答案 0 :(得分:1)

您可以使用ValueProvider.GetValue("HasEditPermission").RawValue来访问该值。

<强>控制器:

public class BController : Controller
{
    public ActionResult Index()
    {
         ViewBag.HasEditPermission = Boolean.Parse(
              ValueProvider.GetValue("HasEditPermission").RawValue.ToString());

        return PartialView();
    }
}

查看:

...
@if (ViewBag.HasEditPermission)
{
    // some html rendering
}
...

<强>更新

Request.Params获取QueryString,Form,Cookies和ServerVariables项目的组合集合,而不是RouteValues。

@Html.Action("Index", "BController", new { HasEditPermission = true })

HasEditPermissionRouteValue

你也可以尝试这样的事情

ViewContext.RouteData.Values["HasEditPermission"]

在您的视图和后续子动作视图中......