Html.Action() приводит к тому, что маршрут в таблице маршрутов не соответствует предоставленным значениям.

Этот вопрос обсуждался много раз, но решения для моего конкретного случая я так и не нашел.

В одном из представлений 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 в других местах, и они ДЕЙСТВИТЕЛЬНО работают, поэтому я понимаю, почему некоторые из них работают, а другие нет, но основная проблема сейчас заключается в том, чтобы заставить работать список моей страны.


person Julius    schedule 17.11.2013    source источник


Ответы (2)


Вы можете решить это, выполнив следующие действия

  1. Убедитесь, что ваш контроллер расширяет SurfaceController Umbraco.
  2. Назовите его YourName*SurfaceController*
  3. Добавьте аннотацию [PluginController("CLC")] (я из Java) к вашему контроллеру. CLC расшифровывается как CountryListController. Вы, конечно, можете придумать свое имя.
  4. Добавьте имя PluginController (CLC) в вызов Html.Action в качестве параметра «Область».

Мой контроллер:

[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"})
person Julius    schedule 17.11.2013

вы можете использовать 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

person angela.mirjalili    schedule 17.11.2013
comment
User2543... спасибо за ответ. К сожалению, добавление нуля не помогло, и я не понял другого вашего решения. Однако я нашел решение в то же время. Я думаю, что эта проблема связана с Umbraco... (хотя это также общая проблема MVC). - person Julius; 18.11.2013