【问题标题】:Asp.Net MVC - Overload Action methodAsp.Net MVC - 重载动作方法
【发布时间】:2011-07-15 10:26:29
【问题描述】:

我创建了一个 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>

在视图中插入用户控件(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?

非常感谢您的回复

【问题讨论】:

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


【解决方案1】:

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

一种解决方法是在同一方法中处理这两个操作:

public ActionResult Index(int? id) {

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

【讨论】:

  • 使用与可空参数相同的方法它有效!现在我尝试 mvcCodeRouting..
  • 当我添加 mvccoderouting 的引用时,出现警告图标。我在 Visual Studio 2008 中使用 asp.net mvc 2。
猜你喜欢
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
  • 2010-11-20
  • 2010-10-01
相关资源
最近更新 更多