Получить доступ к дочернему параметру действия в его представлении

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"] в частичном представлении я получаю ноль.. но если я включу HasEditPermission в качестве параметра для моего Index действие BController тогда я получаю значение..

Я думаю, я не получаю это от Request.Params потому что фактический запрос AControllerIndex действие, которое не включает этот параметр.

Но мне интересно, как это связывает значение с параметром HasEditPermission действия Index (предположим, если он у меня есть) BController?

Пожалуйста, может кто-нибудь сказать мне, как я могу получить к нему доступ непосредственно в представлении? (Я знаю, что использование ViewBag в Index является вариантом)

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 })

HasEditPermission это RouteValue,

Вы также можете попробовать что-то вроде этого

ViewContext.RouteData.Values["HasEditPermission"]

в ваших представлениях и последующих дочерних действиях.

Другие вопросы по тегам