我创建了一个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吗?
非常感谢您的回复
答案 0 :(得分:10)
您需要使用ActionMethodSelector属性装饰这两个重载以消除歧义。 ASP.NET MVC不知道如何选择适当的重载。
解决方法是使用相同的方法处理这两个操作:
public ActionResult Index(int? id) {
if (id.HasValue) {
// id present
} else {
// id not present
}
}