Asp.Net MVC - метод действия перегрузки - PullRequest
5 голосов
/ 15 марта 2011

Я создал сайт asp.net mvc

Моя проблема в том, как реализовать метод действия перегрузки

Контроллер


    public ActionResult Index(int id)
    {
        //code
        return View(model);
    }

    public ActionResult Index()
    {
        //code  
        return View(model);
    }

View


    <div id="menucontainer">
            <ul id="menu">          
                    <li><%= Html.ActionLink("Home", "Index", "Home")%></li>
                    <%if (Page.User.Identity.IsAuthenticated)
                      {%>
                    <li><%= Html.ActionLink("Profilo", "Index", "Account")%></li>
                    <%} %>
                    <li><%= Html.ActionLink("About", "About", "Home")%></li>
                </ul>
            </div>

Пользовательский контроль (ascx) вставлен в представление. Этот usercontrol перечисляет друзей профиля (просмотр)


   <td>
            <%= Html.ActionLink(Html.Encode(item.Nominativo), "Index", "Account", new { id = item.IdAccount }, null)%>
        </td>

Global Asax


    public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default", 
                "{controller}/{action}/{id}", 
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
            );
        }

когда я нажимаю Индекс действия в представлении, возвращаем ошибку «Не удается найти ресурс ... ecc ..»

Я нашел несколько ответов на эту проблему (используя атрибут ecc ..), но это не работает.

Есть способ сделать это? Я должен добавить maproute в глобальный asax?

большое спасибо за ваши ответы

1 Ответ

10 голосов
/ 15 марта 2011

Для устранения неоднозначности необходимо украсить обе перегрузки атрибутом ActionMethodSelector.ASP.NET MVC не знает, как выбрать соответствующую перегрузку.

Обходной путь должен обрабатывать оба действия одним и тем же методом:

public ActionResult Index(int? id) {

   if (id.HasValue) {
      // id present
   } else {
      // id not present
   }
}
...