如何从View in Area链接到根控制器?

时间:2015-05-11 18:03:01

标签: asp.net-mvc-4 asp.net-mvc-areas html.actionlink asp.net-mvc-controller

我是MVC的新手,仍然通过将.NET应用转换为MVC来了解详尽信息。

我无法从Action部分内的页面链接到controller中的其他"Area"

我创建了Areas并且仍然设置了默认路由。

Area具有以下结构:

Area
  - Admin
    - Controller
        UserController.cs
    -Model
    -Views
        User
           Index.cshtml

Index.cshtml有一个链接应该在"Index"中调用AccountController操作以打开"Default"视图:

<div class="pagenavigator">@Html.ActionLink("Main Menu", "Index", new { area = "", controller="Account" })</div>

应用程序的默认结构如下:

- Controller
     AccountController.cs
- Views
     - Account
          Default.cshtml 
          Login.cshtml

我的默认结构还有一个控制器文件夹,其中包含一个控制器,其中RouteConfig.cs设置了登录(默认)操作:

routes.MapRoute(
   name: "Default",
   url: "{controller}/{action}/{id}",
   defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }
);

以下是Account Controller

public class AccountController : Controller
{
    public ActionResult Login(string returnUrl)
    {
        StringBuilder sb = new StringBuilder();
        sb.Append("Web Security Administration Portal<br/><br/>");
        ViewBag.ReturnUrl = returnUrl;
        ViewBag.Message = sb.ToString();
        return View();
    }

    public ActionResult Index()
    {
        return View("Default");
    }

    public ActionResult Login(LoginModel model)
    {
        if (ModelState.IsValid)
        {
           bool authenticated = Security.AuthenticateLANUser(model.UserName, model.Password);
           if (!authenticated)
           {
               Session["authenticated"] = false;
               System.Text.StringBuilder errorMsg = new System.Text.StringBuilder();
               errorMsg.Append("Invalid Login/Password entered.");
               errorMsg.Append("We were not able to authenticate you in in Active Directory based on the information entered, ");
               errorMsg.Append("but we recorded your attempt for audit purposes.");

               ModelState.AddModelError("", errorMsg.ToString());
               return View(model);
            }
            else
            {
                return View("Default");
            }
        }

        ModelState.AddModelError("", "The user name or password provided is incorrect.");
        return View(model);
    }
}

如果我需要链接到默认应用程序路由下定义的"Default"视图,Index.cshtml下定义的Area,我应该怎么做,所以当我点击链接时,我的{{1使用正确的"AccountController"操作调用?

简而言之,我需要找到从“区域”部分链接到默认应用程序部分中控制器操作的方法,以便调用另一个正确的Action,这在默认路由映射中未指定 现在,链接已断开。

当我查看源代码中的链接时,我看到以下内容:"Index",但是当我点击链接时,我收到的错误是:找不到请求的网址:{{ 1}}

这是AdminAreaRegistration:

<a href="/Account/Index">

0 个答案:

没有答案