为什么我的链接没有将我带入我的控制器?

时间:2017-08-17 17:45:25

标签: c# asp.net-mvc-4 web controller

我想我并不完全理解url如何使用C#项目,因为我不知道如何指定一个url来通过控制器而不只是返回一个aspx页面。

假设我试图通过名为“ScholarshipController.cs”的Controller进入我的项目的索引页面。我想在这个控制器中点击Index方法/动作,我的网址如下(我的应用名称是“TuitionAssistance”fyi):

http://localhost/TuitionAssistance/Scholarship/Index

但是,运行此URL只会返回位于“Scholarship”视图文件中名为“Index.aspx”的aspx页面,而不会触及Controller。为什么会发生这种情况,如何让它通过控制器,以便索引页面在加载时会将相应的信息加载到它上面?

对不起,如果这是一个愚蠢的问题。任何见解将不胜感激。谢谢!

Route.config:

using System.Web.Mvc;
using System.Web.Routing;

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

            /* Scholarship */

            /* Scholarship */
            //routes.MapRoute("TuitionAssistance",
            //    "tuition/{name}",
            //    new { controller = "TuitionAssistance", action = "Index", name = "" });

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

            routes.MapRoute(
                name: "Scholarship",
                url: "{controller}/{action}/{employee_number}",
                defaults: new { controller = "Home", action = "Scholarship", employee_number = UrlParameter.Optional }

            );

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

        }
    }
}

2 个答案:

答案 0 :(得分:3)

您的路由(URL)无法匹配文件系统上实际存在的任何内容。在您的示例中,您显然有一个文件[document root]\Scholarship\Index.aspx。因此,对Scholarship/Index的请求将返回该文件,而不是调用ASP.NET MVC机制来加载控制器操作。

答案 1 :(得分:1)

在MVC ASP.NET中,将这些类型的链接视为在控制器中调用方法的方法。当访问该链接时,您的控制器会执行一堆垃圾,然后返回ActionResult(或其他内容)。出于解释的缘故,此ActionResult是在相应的视图文件中写入的标记。 Controller - > index()将在视图下返回名为index的视图 - >控制器。如果要将信息传递给视图,则会将包含其中所有信息的模型传递给索引控制器的视图(返回视图(MyFancyModel))。该视图顶部有一条剃刀线,例如:@model The.Namespace.Wherever.my.model.is

Visual Studio中的脚手架控制器和视图专门用于索引页面,只传递相应数据库中的项目列表。