Asp.Net MVC - 重载动作方法

时间:2011-03-15 00:11:44

标签: asp.net asp.net-mvc asp.net-mvc-2 routes overloading

我创建了一个asp.net mvc网站

我的问题是如何实现重载动作方法

控制器


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

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

查看


    <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>

在视图中插入Usercontrol(ascx)。此用户控件列出了配置文件的朋友(视图)


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

全球性的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 ..)但是没有用。

有办法吗?我必须在全局asax中添加maproute吗?

非常感谢您的回复

1 个答案:

答案 0 :(得分:10)

您需要使用ActionMethodSelector属性装饰这两个重载以消除歧义。 ASP.NET MVC不知道如何选择适当的重载。

解决方法是使用相同的方法处理这两个操作:

public ActionResult Index(int? id) {

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