我正在使用ASP.MVC并尝试学习......
我有以下控制器
// get all authors
public ActionResult Index()
{
var autores = autorRepository.FindAllAutores();
return View("Index", autores);
}
// get authors by type
public ActionResult Index(int id)
{
var autores = autorRepository.FindAllAutoresPorTipo(id);
return View("Index", autores);
}
如果我尝试http://server/Autor/1
,我会收到404错误。这是为什么?
我甚至尝试创建一个特定的方法ListByType(int id)和对应的视图,但这也不起作用(URL:http://server/Autor/ListByType/1
)
有什么想法吗?
编辑哦,http://server/Autor
工作正常。没有参数的方法正确地吐出我的视图。
答案 0 :(得分:2)
假设您的类名为AutorController,并假设您具有
的默认路由配置{controller}/{action}/{id}
您应该可以请求
/Autor/Index/<anything>
但是,你似乎对动作方法有点困惑。你可以像下面这样组合你的行动方法:
public ActionResult Index(int? id)
{
var autores; // I know this wont compile - but without knowing what type FindAllAutoRes returns, I can't make a specific type for this example
if(id.HasValue)
autores = autorRepository.FindAllAutoresPorTipo(id);
else
autores = autorRepository.FindAllAutores();
return View(autores); // Will automatically select the 'Index' View
}
MVC将选择与您的路由数据相对应的第一个有效操作方法 - 因此,如果您请求/ Autor / Index / 3,您将获得第一个操作方法,但由于它没有参数,因此id路由数据不是什么都绑定了。