我正在开发具有多个领域的MVC应用程序。一切正常,但我无法显示其中一个区域的内容,即Scheme
。
在快捷方式中,这个:
@Html.ActionLink("Show error page", "Index", "Error", new { area="Scheme" });}
返回404,直接在浏览器中输入host/Scheme/Error/
。
然而!这样:
@{Html.RenderAction("Index", "Error", new { area="Scheme" });}
在布局页面上正确呈现操作结果内容并按预期显示。
我在这个区域的每个控制器中都注意到了同样的行为。
SchemeAreaRegistration.cs:
using System.Web.Mvc;
namespace WebApplication.Areas.Scheme
{
public class SchemeAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Scheme";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Scheme_default",
"Scheme/{controller}/{action}/{id}",
defaults: new { action = "Index", id = UrlParameter.Optional },
namespaces: new string[] { "WebApplication.Areas.Scheme.Controllers" }
);
}
}
}
ErrorController.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace WebApplication.Areas.Scheme.Controllers
{
public class ErrorController : Controller
{
// GET: Scheme/Error
public ActionResult Index()
{
return View();
}
}
}
有什么想法吗?
答案 0 :(得分:0)
试试这样。
@Html.ActionLink("your link", "Index", "Error", new { area = "Scheme" }, null)
或
@Url.Action("Action", "Controller", new { area = "AreaName" })
或
@Html.RouteLink("your link", new { action = "Index", controller = "Error", area = "Scheme" })
答案 1 :(得分:0)
你正在调用Html.ActionLink的这个重载:
public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper,
string linkText, string actionName, object routeValues);
请注意,第一个参数( this 之后)是linkText
,可能不是您的意图或期望。
你可能应该称之为:
public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper,
string linkText, string actionName, string controllerName,
object routeValues, object htmlAttributes);
请注意,controllerName
的所有重载都需要同时存在routeValues和htmlAttributes。
所以你的电话会变成:
@Html.ActionLink("Click here", "Index", "Error", new { area="Scheme" }, null);