如何从区域视图调用主要操作?

时间:2015-02-15 22:00:43

标签: c# asp.net-mvc-4 razor model-view-controller

我的项目结构是:

MainProject(项目名称)

区域--->管理员(包含视图,控制器,......)

控制器

浏览

我的项目中有一个区域。 现在我想使用主要布局来管理区域的视图,主布局调用一些动作。当我的项目执行时,在主布局中出现错误@ Html.Action(“索引”,“语言”),找不到这个观点。

我的主要布局代码是:

@using Constants
@using SquishIt.Framework

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>@ViewBag.Title</title>
  <meta name="description" content="@ViewBag.MetaDesc" />
  @RenderSection("SocialMeta", false)

 </head>
 <body>

  <div class="navbar navbar-inverse navbar-fixed-top">
    <div>
            @Html.Action("Index", "Language" )

    </div>
     .
     .  
   </div>
   </body>

我的管理区域视图代码是:

@model AdminModerateViewModel
@{
   ViewBag.Title = "management";
   Layout = string.Concat("~/Views/Shared/", "_Layout", ".cshtml");
 }
 <div>
  ........
 </div>

1 个答案:

答案 0 :(得分:1)

Html.Action提供如下覆盖:

public static MvcHtmlString Action(
    this HtmlHelper htmlHelper,
    string actionName,
    string controllerName,
    RouteValueDictionary routeValues
)

注意最后一个参数:routeValues

Html.Action助手将使用当前区域(如果未指定)。因此,当它在“主”视图中呈现时,它将呈现:/Language/Index。在管理员视图中呈现它时,它将呈现:/Admin/Language/Index ..可能存在也可能不存在。

你想要做的是覆盖它使用的区域..所以它总是使用“主”区域:

@Html.Action("Index", "Language", new { area = "" }) @* Blank area .. "main" area *@