Перегрузка действия контроллера MVC - PullRequest
0 голосов
/ 14 января 2011

Могу ли я сделать что-то подобное, чтобы не выдавать ошибку:

public class AdsController : Controller
{
  AdsRepository repo = new AdsRepository();

  public ActionResult Details(string id)
  {
    AdSlots adslot = new AdSlots();
    Enum.TryParse(id, true, out adslot);
    return Content(repo.GetInvocationCode(adslot, Global.SiteInfo.ID));
  }

  [ChildActionOnly]
  public ActionResult Details(AdSlots slot)
  {
    return Content(repo.GetInvocationCode(slot, Global.SiteInfo.ID));
  }

}

Дело в том, что я хочу получить доступ к ресурсу через / ads / details /Таблица лидеров в качестве URL-адреса в браузере, но также и на главных страницах, используя:

 <% Html.RenderAction("Details", "Ads", new {slot = AdSlots.Leaderboard }); %>

Я просто думаю, что чище, чем:

 <% Html.RenderAction("Details", "Ads", new {slot = "Leaderboard" }); %>

Если я сделаю, как указано выше, и вызову URL/ ads / details / лидеров Я получаю эту ошибку:

Текущий запрос действия «Подробности» для типа контроллера «AdsController» неоднозначен между следующими методами действия и т. д.

Я не думал, что получу эту ошибку, поскольку передал атрибут [ChildActionOnly] другому действию.Тогда я подумал, что для системы было очевидно, что если я получу доступ к ней через браузер, у меня будет только один вариант, не так очевидно.

Ответы [ 2 ]

2 голосов
/ 14 января 2011

Возможно, не самый хороший, но
<% Html.RenderAction("Details", "Ads", new {id = AdSlots.Leaderboard.ToString() }); %> должно всегда приводить к первому действию ... И поскольку проблема в том, что MVC вызывает ToString () для вашего перечисления в ЛЮБОЙ, так что вы можете просто полностью пропустить второе действие контроллера, и тогда ваша проблема может исчезнуть ... Разбор перечисление не , что дорого ...

0 голосов
/ 14 января 2011

ChildActionOnlyAttribute обеспечивает только то, что действие вызывается как часть дочернего запроса через Html.Action и Html.RenderAction по вашему мнению.Этот атрибут не учитывается, когда MVC пытается сопоставить метод с входящим вызовом маршрута.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...