【问题标题】:How to call main action from area view?如何从区域视图调用主要操作?
【发布时间】:2015-02-15 22:00:42
【问题描述】:

我的项目结构是:

MainProject(项目名称)

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

控制器

观看次数

我的项目中有一个区域。 现在我想将主布局用于管理区域的视图,该主布局调用一些操作。当我的项目执行时,主布局中的 @Html.Action("Index", "Language") 行发生错误,即找不到这个视图。

我的主布局代码是:

@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>

【问题讨论】:

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


    【解决方案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 *@
    

    【讨论】:

    • 没问题。很高兴我能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多