这个问题已经多次讨论过,但我没有找到针对我的具体案例的解决方案。
在我的一个Umbraco(6)视图中,我使用
调用控制器方法@Html.Action("Index", "CountryListing");
这导致“路由表中没有路由”异常。
我一直在使用RegisterRoutes方法摆弄无济于事。我想知道它是否甚至被用作当我清空RegisterRoutes方法时网站仍然起作用。这就是现在的样子:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
我也试过像这样添加一个空的“区域”
@Html.Action("Index", "CountryListing", new {area: String.Empty});
我在其他地方使用@ Html.Action语句并且它们可以工作,所以我确实理解为什么其中一些工作而其他人没有工作,但现在的主要问题是让我的国家列出行动起作用。
答案 0 :(得分:3)
您可以通过执行以下操作来解决此问题
我的控制器:
[PluginController("CLC")]
public class CountryListingSurfaceController : SurfaceController
{
public ActionResult Index()
{
var listing = new CountryListingModel();
// Do stuff here to fill the CountryListingModel
return PartialView("CountryListing", listing);
}
}
我的部分视图(CountryListing.cshtml):
@inherits UmbracoViewPage<PatentVista.Models.CountryListingModel>
@foreach (var country in Model.Countries)
{
<span>More razor code here</span>
}
行动召唤:
@Html.Action("Index", "CountryListingSurface", new {Area= "CLC"})
答案 1 :(得分:0)
您可以使用null而不是使用String.empty
@Html.Action("Index", "CountryListing",null);
如果您正在使用区域,则必须覆盖每个区域的RegisterRoutes
public override string AreaName
{
get
{
return "CountryListing";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"CountryListing_default",
"CountryListing/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
我建议你看看同样的问题: https://stackoverflow.com/a/11970111/2543986