AlbumsController PhotoRepository Index.aspx(查看)
在Index.aspx里面,我有一个部分视图调用AlbumControl。我想通过ajax和ajaxhelper来更新它。
问题是我希望能够执行以下操作:
http://www.mysite.com/Albums
http://www.mysite.com/Albums?FilterTag=Birthdays
当我这样做时,我收到以下错误:
控制器类型'AlbumsController'上的当前操作请求'索引'在以下操作方法之间不明确:
类型Controllers.AlbumsController上的System.Web.Mvc.ActionResult索引(System.String) Controllers.AlbumsController类型的System.Web.Mvc.ActionResult Index()
我原本以为asp.net mvc会想到它在哪里如果我传入查询字符串中的参数它将转到索引(字符串Tag)方法,如果我没有传入参数,它会去Index()。
建议?
答案 0 :(得分:4)
问题是MVC路由引擎无法区分: -
1)调用索引()
和
2)使用tag = null
调用索引(字符串标记)这就是为什么它说这个请求含糊不清。
你可以这样做: -
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 ambiguous action methods
或者你可以设置路线,以便专辑和专辑?FilterTag = X明确地采取不同的行动(顺便提一下,我推荐“专辑”和“专辑/ 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) { ... }