使用参数吐出索引视图

时间:2010-04-29 14:51:58

标签: c# asp.net-mvc

我正在使用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工作正常。没有参数的方法正确地吐出我的视图。

1 个答案:

答案 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路由数据不是什么都绑定了。