如何使ASP.NET正确路由控制器?

时间:2015-06-03 18:02:25

标签: c# asp.net-mvc

我在控制器中有这个:

    public ActionResult Details(int? id)
    {
        if(id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }

        Sales saleRecord = new Sales();
        var result = saleRecord.GetSalesOrderHeader((int)id);


        return View(result);
    }

但是,如果我浏览到/ ControllerName / Details / 5,我会收到此错误:

  “/'应用程序中的服务器错误。 - 找不到视图'详细信息'或其主文件,或者没有视图引擎支持搜索的位置。”

奇怪的是,如果我使用ASP.NET Scaffolding生成视图,那么Details的部分工作正常。它与我上面的代码基本相同。

这是我的RouteConfig.cs,如果相关的话:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

那么为什么脚手架控制器工作正常,没有任何特定的东西添加到RouteConfig,但我的控制器Details方法不起作用?

1 个答案:

答案 0 :(得分:2)

错误中应该有更详细的信息,说明搜索了哪些位置。你是否在控制器中放置了断点并检查它是否被击中?

尝试

return View((object)result);

而不是

return View(result)

导致其调用重载View(string viewName)

如果这不起作用,请尝试明确指定viewName:

return View("ViewName", name);

此外,请检查您的文件夹结构。 MVC在views文件夹下查找视图(如Index),但它们也必须位于以其控制器命名的文件夹下(部分视图除外)。