asp.net mvc с необязательными параметрами и частичными представлениями - PullRequest
1 голос
/ 21 сентября 2009

у меня есть:

AlbumsController PhotoRepository Index.aspx (просмотр)

внутри Index.aspx, у меня есть частичное представление вызова AlbumControl. Я хочу обновить это через ajax и ajaxhelper.

проблема в том, что я хочу иметь возможность делать следующее:

http://www.mysite.com/Albums
http://www.mysite.com/Albums?FilterTag=Birthdays

когда я делаю это, я получаю следующую ошибку:

Текущий запрос на действие «Индекс» для типа контроллера «AlbumsController» неоднозначен между следующими методами действия:

Индекс System.Web.Mvc.ActionResult (System.String) для типа Controllers.AlbumsController Индекс System.Web.Mvc.ActionResult () для типа Controllers.AlbumsController

я бы подумал, что asp.net mvc выяснил бы, где, если я передам параметр в строке запроса, он перейдет к методу Index (string Tag), а если я не передам параметр, он будет идти в индекс ().

предложения?

1 Ответ

4 голосов
/ 21 сентября 2009

Проблема в том, что MVC Routing Engine не может определить разницу между: -

1) Индекс вызова ()

и

2) Индекс вызова (строковый тег) с тегом = ноль

Вот почему говорится, что запрос неоднозначен.

Вы можете просто сделать: -

public ActionResult Index(string tag)
{
  if(String.IsNullOrEmpty(tag))
  {
    // index code goes here
    return View("Index");
  }
  else
  {
    // code to handle filtered view goes here
    return View("Tag");
  }
}

или вы можете принудительно задать параметр с помощью пользовательского атрибута: -

Неоднозначные методы действия ASP.NET MVC

или вы можете настроить маршруты так, чтобы Альбомы и Альбомы? FilterTag = X явно переходили к различным действиям (кстати, я бы порекомендовал "Альбомы" и "Альбомы / Х"): -

  routes.MapRoute("AlbumsIndex", "Albums",
    new { controller = "Albums", action = "Index" });
  routes.MapRoute("AlbumsTag", "Albums/{tag}",
    new { controller = "Albums", action = "Tag", tag = "" });
  routes.MapRoute("Default", "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = "" );

и

public ActionResult Index() { ... }
public ActionRestlt Tag(string tag) { ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...